This is the coordinator node.

Dependencies:   mbed-rtos mbed Zigbee_communication EthernetInterface WebSocketClient

Committer:
ShaolinPoutine
Date:
Tue Feb 14 21:06:06 2017 +0000
Revision:
7:4b85a9051b3a
Parent:
5:7019f4f6b538
Parent:
6:bd6001a78537
Added web comm

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EmileArseneault 2:51d67a8b2325 1 // Emile Arseneault : arse1503
EmileArseneault 2:51d67a8b2325 2 // Raphael Drouin : dror2204
EmileArseneault 2:51d67a8b2325 3
EmileArseneault 2:51d67a8b2325 4 // Coordinator Node
EmileArseneault 2:51d67a8b2325 5
ShaolinPoutine 0:4cfeffb4d773 6 #include "mbed.h"
ShaolinPoutine 0:4cfeffb4d773 7 #define FRAMEDELIMITER 0x7E
ShaolinPoutine 0:4cfeffb4d773 8 #include "rtos.h"
ShaolinPoutine 4:d9968ed09187 9 #include "xbee.h"
ShaolinPoutine 0:4cfeffb4d773 10
ShaolinPoutine 7:4b85a9051b3a 11 #include "EthernetInterface.h"
ShaolinPoutine 7:4b85a9051b3a 12 #include "Websocket.h"
ShaolinPoutine 7:4b85a9051b3a 13
ShaolinPoutine 0:4cfeffb4d773 14 // 4269
ShaolinPoutine 0:4cfeffb4d773 15 Serial pc(USBTX, USBRX);
ShaolinPoutine 0:4cfeffb4d773 16 DigitalOut myled(LED1);
ShaolinPoutine 0:4cfeffb4d773 17
ShaolinPoutine 4:d9968ed09187 18 Mail<char, 250> mymail;
ShaolinPoutine 6:bd6001a78537 19 Mail<char[256], 16> webmail;
ShaolinPoutine 6:bd6001a78537 20 XBee xbee(p8, p13, p14, &mymail, &webmail);
ShaolinPoutine 7:4b85a9051b3a 21 Websocket* ws;
ShaolinPoutine 0:4cfeffb4d773 22
ShaolinPoutine 0:4cfeffb4d773 23 void ReadSerial()
ShaolinPoutine 0:4cfeffb4d773 24 {
ShaolinPoutine 0:4cfeffb4d773 25 // 00 13 A2 00
ShaolinPoutine 0:4cfeffb4d773 26 // 40 3E 09 63
ShaolinPoutine 4:d9968ed09187 27 xbee.SendATCommand('S', 'H');
ShaolinPoutine 4:d9968ed09187 28 xbee.SendATCommand('S', 'L');
ShaolinPoutine 0:4cfeffb4d773 29 }
ShaolinPoutine 0:4cfeffb4d773 30
EmileArseneault 2:51d67a8b2325 31 void InitialisePANID(char PANIDMSB, char PANIDLSB)
EmileArseneault 2:51d67a8b2325 32 {
EmileArseneault 2:51d67a8b2325 33 char PanID[2] = {PANIDMSB, PANIDLSB};
EmileArseneault 2:51d67a8b2325 34
ShaolinPoutine 4:d9968ed09187 35 xbee.SendATCommand('I', 'D', &PanID[0], 2);
ShaolinPoutine 6:bd6001a78537 36 wait(5);
ShaolinPoutine 6:bd6001a78537 37 xbee.SendATCommand('M','Y');
ShaolinPoutine 6:bd6001a78537 38 xbee.SendATCommand('O','P');
EmileArseneault 2:51d67a8b2325 39 }
EmileArseneault 2:51d67a8b2325 40
EmileArseneault 2:51d67a8b2325 41 void BroadcastHelloWorld()
EmileArseneault 2:51d67a8b2325 42 {
EmileArseneault 2:51d67a8b2325 43 char hello[5] = {'H', 'e', 'l', 'l', 'o'};
EmileArseneault 2:51d67a8b2325 44 char world[5] = {'w', 'o', 'r', 'l', 'd'};
EmileArseneault 2:51d67a8b2325 45
EmileArseneault 2:51d67a8b2325 46 while (1)
EmileArseneault 2:51d67a8b2325 47 {
EmileArseneault 5:7019f4f6b538 48 xbee.ZigBeeTransmit(0xFFFE, 0x00000000, 0x0000FFFF, &hello[0], 5);
EmileArseneault 5:7019f4f6b538 49 xbee.ZigBeeTransmit(0xFFFE, 0x00000000, 0x0000FFFF, &world[0], 5);
EmileArseneault 2:51d67a8b2325 50 wait(2);
EmileArseneault 2:51d67a8b2325 51 }
EmileArseneault 2:51d67a8b2325 52 }
EmileArseneault 2:51d67a8b2325 53
ShaolinPoutine 0:4cfeffb4d773 54 void xbee_reader()
ShaolinPoutine 0:4cfeffb4d773 55 {
ShaolinPoutine 0:4cfeffb4d773 56 while(1)
ShaolinPoutine 0:4cfeffb4d773 57 {
ShaolinPoutine 4:d9968ed09187 58 xbee.InterpretMessage();
ShaolinPoutine 0:4cfeffb4d773 59 wait(0.001);
ShaolinPoutine 0:4cfeffb4d773 60 }
ShaolinPoutine 0:4cfeffb4d773 61 }
ShaolinPoutine 0:4cfeffb4d773 62
ShaolinPoutine 0:4cfeffb4d773 63 void tick()
ShaolinPoutine 0:4cfeffb4d773 64 {
ShaolinPoutine 0:4cfeffb4d773 65 myled = !myled;
ShaolinPoutine 0:4cfeffb4d773 66 }
ShaolinPoutine 0:4cfeffb4d773 67
ShaolinPoutine 4:d9968ed09187 68 void msg_reader()
ShaolinPoutine 4:d9968ed09187 69 {
ShaolinPoutine 4:d9968ed09187 70 while (true) {
ShaolinPoutine 4:d9968ed09187 71 osEvent evt = mymail.get();
ShaolinPoutine 4:d9968ed09187 72 if (evt.status == osEventMail)
ShaolinPoutine 4:d9968ed09187 73 {
ShaolinPoutine 4:d9968ed09187 74 char *c = (char*)evt.value.p;
ShaolinPoutine 4:d9968ed09187 75 pc.putc(*c);
ShaolinPoutine 4:d9968ed09187 76 mymail.free(c);
ShaolinPoutine 4:d9968ed09187 77 }
ShaolinPoutine 4:d9968ed09187 78 }
ShaolinPoutine 4:d9968ed09187 79 }
ShaolinPoutine 4:d9968ed09187 80
ShaolinPoutine 0:4cfeffb4d773 81 int main() {
ShaolinPoutine 4:d9968ed09187 82 pc.printf("\r\nI am coordinator\r\n");
ShaolinPoutine 7:4b85a9051b3a 83 EthernetInterface eth;
ShaolinPoutine 7:4b85a9051b3a 84 eth.init(); //Use DHCP
ShaolinPoutine 7:4b85a9051b3a 85 eth.connect();
ShaolinPoutine 7:4b85a9051b3a 86 printf("IP Address is %s\n\r", eth.getIPAddress());
ShaolinPoutine 7:4b85a9051b3a 87
ShaolinPoutine 7:4b85a9051b3a 88 ws = new Websocket("ws://192.168.137.1:4242");
ShaolinPoutine 7:4b85a9051b3a 89 ws->connect();
ShaolinPoutine 7:4b85a9051b3a 90
ShaolinPoutine 4:d9968ed09187 91
ShaolinPoutine 0:4cfeffb4d773 92 Ticker ticker;
ShaolinPoutine 0:4cfeffb4d773 93 ticker.attach(&tick, 1);
ShaolinPoutine 4:d9968ed09187 94
ShaolinPoutine 4:d9968ed09187 95 Thread thread(xbee_reader);
ShaolinPoutine 4:d9968ed09187 96 Thread thread_reader(msg_reader);
ShaolinPoutine 0:4cfeffb4d773 97
ShaolinPoutine 0:4cfeffb4d773 98 wait(3);
ShaolinPoutine 0:4cfeffb4d773 99 ReadSerial();
EmileArseneault 2:51d67a8b2325 100 InitialisePANID(0x42, 0x69);
ShaolinPoutine 6:bd6001a78537 101
ShaolinPoutine 0:4cfeffb4d773 102 while(1) {
ShaolinPoutine 7:4b85a9051b3a 103 osEvent evt = webmail.get();
ShaolinPoutine 7:4b85a9051b3a 104 if (evt.status == osEventMail)
ShaolinPoutine 7:4b85a9051b3a 105 {
ShaolinPoutine 7:4b85a9051b3a 106 char *c = (char(*))evt.value.p;
ShaolinPoutine 7:4b85a9051b3a 107 // Send email
ShaolinPoutine 7:4b85a9051b3a 108 ws->send("sending");
ShaolinPoutine 7:4b85a9051b3a 109 ws->send(c);
ShaolinPoutine 7:4b85a9051b3a 110 wait(1);
ShaolinPoutine 7:4b85a9051b3a 111 mymail.free(c);
ShaolinPoutine 7:4b85a9051b3a 112 }
ShaolinPoutine 0:4cfeffb4d773 113 }
ShaolinPoutine 0:4cfeffb4d773 114 }