using websocket to dynamic display sensor data on webpage; sends alert email from mbed.
Dependencies: BroadcastSend EthernetInterface OneWire2 SimpleSMTPClient mbed-rpc mbed-rtos
main.cpp@0:9bb9ffde0d91, 2016-02-18 (annotated)
- Committer:
- cryptoc
- Date:
- Thu Feb 18 18:34:12 2016 +0000
- Revision:
- 0:9bb9ffde0d91
add project description readme.txt
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
cryptoc | 0:9bb9ffde0d91 | 1 | /** |
cryptoc | 0:9bb9ffde0d91 | 2 | xAP enabed one wire master Part II |
cryptoc | 0:9bb9ffde0d91 | 3 | Author: Zhongying Qiao |
cryptoc | 0:9bb9ffde0d91 | 4 | Date: 9th March 2014 |
cryptoc | 0:9bb9ffde0d91 | 5 | Tested working 3rd March 2014 Qiao |
cryptoc | 0:9bb9ffde0d91 | 6 | |
cryptoc | 0:9bb9ffde0d91 | 7 | **/ |
cryptoc | 0:9bb9ffde0d91 | 8 | |
cryptoc | 0:9bb9ffde0d91 | 9 | |
cryptoc | 0:9bb9ffde0d91 | 10 | //one wire communication |
cryptoc | 0:9bb9ffde0d91 | 11 | #include "mbed.h" |
cryptoc | 0:9bb9ffde0d91 | 12 | #include "rtos.h" |
cryptoc | 0:9bb9ffde0d91 | 13 | #include "OneWire.h" |
cryptoc | 0:9bb9ffde0d91 | 14 | #include "Network.h" |
cryptoc | 0:9bb9ffde0d91 | 15 | #include "DS1920.h" |
cryptoc | 0:9bb9ffde0d91 | 16 | #include "demo_for_temperature.h" |
cryptoc | 0:9bb9ffde0d91 | 17 | //xAP |
cryptoc | 0:9bb9ffde0d91 | 18 | #include "EthernetInterface.h" |
cryptoc | 0:9bb9ffde0d91 | 19 | //webpage |
cryptoc | 0:9bb9ffde0d91 | 20 | #include "Websocket.h" |
cryptoc | 0:9bb9ffde0d91 | 21 | //email SMTP client |
cryptoc | 0:9bb9ffde0d91 | 22 | #include "NTPClient.h" |
cryptoc | 0:9bb9ffde0d91 | 23 | #include "SimpleSMTPClient.h" |
cryptoc | 0:9bb9ffde0d91 | 24 | |
cryptoc | 0:9bb9ffde0d91 | 25 | #define DOMAIN "DOMAIN"// no impact |
cryptoc | 0:9bb9ffde0d91 | 26 | #define SERVER "aspmx.l.google.com" |
cryptoc | 0:9bb9ffde0d91 | 27 | #define PORT "25" // Port 25 doesn't require TSL |
cryptoc | 0:9bb9ffde0d91 | 28 | #define USER "me"//doesn't matter |
cryptoc | 0:9bb9ffde0d91 | 29 | #define PWD "does_not_matter"//doesn't matter |
cryptoc | 0:9bb9ffde0d91 | 30 | #define FROM_ADDRESS "mbed"// doesn't matter |
cryptoc | 0:9bb9ffde0d91 | 31 | |
cryptoc | 0:9bb9ffde0d91 | 32 | |
cryptoc | 0:9bb9ffde0d91 | 33 | // less than 128 characters. |
cryptoc | 0:9bb9ffde0d91 | 34 | #define TO_ADDRESS "anywhere@gmail.com" // must be an gmail address |
cryptoc | 0:9bb9ffde0d91 | 35 | |
cryptoc | 0:9bb9ffde0d91 | 36 | #define SUBJECT "temperature warning message" |
cryptoc | 0:9bb9ffde0d91 | 37 | |
cryptoc | 0:9bb9ffde0d91 | 38 | |
cryptoc | 0:9bb9ffde0d91 | 39 | |
cryptoc | 0:9bb9ffde0d91 | 40 | int main() { |
cryptoc | 0:9bb9ffde0d91 | 41 | char recv[30]; //webpage data |
cryptoc | 0:9bb9ffde0d91 | 42 | char strTimeMsg[16];// time of LCD |
cryptoc | 0:9bb9ffde0d91 | 43 | char msg[]="Hello this is a message from mbed ";//email content |
cryptoc | 0:9bb9ffde0d91 | 44 | const int BROADCAST_PORT=3639 ;//designated port for xAP sending UDP packets |
cryptoc | 0:9bb9ffde0d91 | 45 | puts("program started\r"); |
cryptoc | 0:9bb9ffde0d91 | 46 | |
cryptoc | 0:9bb9ffde0d91 | 47 | printf("Setting up Ethernet...\n"); |
cryptoc | 0:9bb9ffde0d91 | 48 | EthernetInterface eth; |
cryptoc | 0:9bb9ffde0d91 | 49 | eth.init();//use DHCP |
cryptoc | 0:9bb9ffde0d91 | 50 | //printf("result from init %d\r\n",eth.init("172.20.177.241 ", "255.255.255.0", "172.20.177.1")); |
cryptoc | 0:9bb9ffde0d91 | 51 | //printf("IP Address is %s\r\n", eth.getIPAddress()); |
cryptoc | 0:9bb9ffde0d91 | 52 | //printf("gateway is %s\r\n", eth.getGateway()); |
cryptoc | 0:9bb9ffde0d91 | 53 | //printf("mask is %s\r\n", eth.getNetworkMask()); |
cryptoc | 0:9bb9ffde0d91 | 54 | eth.connect(); |
cryptoc | 0:9bb9ffde0d91 | 55 | printf("IP Address is %s\n", eth.getIPAddress()); |
cryptoc | 0:9bb9ffde0d91 | 56 | |
cryptoc | 0:9bb9ffde0d91 | 57 | //UDP packet broadcast setup |
cryptoc | 0:9bb9ffde0d91 | 58 | UDPSocket udp; |
cryptoc | 0:9bb9ffde0d91 | 59 | udp.init(); |
cryptoc | 0:9bb9ffde0d91 | 60 | printf("broadcasting success? %d \n", udp.set_broadcasting(true)); |
cryptoc | 0:9bb9ffde0d91 | 61 | Endpoint broadcast; |
cryptoc | 0:9bb9ffde0d91 | 62 | printf("set address result %d\n", broadcast.set_address("255.255.255.255", BROADCAST_PORT)); |
cryptoc | 0:9bb9ffde0d91 | 63 | |
cryptoc | 0:9bb9ffde0d91 | 64 | //setting up SMTP client |
cryptoc | 0:9bb9ffde0d91 | 65 | SimpleSMTPClient smtp; |
cryptoc | 0:9bb9ffde0d91 | 66 | int ret; |
cryptoc | 0:9bb9ffde0d91 | 67 | smtp.setFromAddress(FROM_ADDRESS); |
cryptoc | 0:9bb9ffde0d91 | 68 | smtp.setToAddress(TO_ADDRESS); |
cryptoc | 0:9bb9ffde0d91 | 69 | |
cryptoc | 0:9bb9ffde0d91 | 70 | //xAP message upon Ethernet connection |
cryptoc | 0:9bb9ffde0d91 | 71 | char *packet_a = "xap-header\n" |
cryptoc | 0:9bb9ffde0d91 | 72 | "{\n" |
cryptoc | 0:9bb9ffde0d91 | 73 | "v=12\n" |
cryptoc | 0:9bb9ffde0d91 | 74 | "hop=1\n" |
cryptoc | 0:9bb9ffde0d91 | 75 | "uid=FF101200\n" |
cryptoc | 0:9bb9ffde0d91 | 76 | "class=SMS.Message\n" |
cryptoc | 0:9bb9ffde0d91 | 77 | "source=georg.mbedlpc1768.ibutton7E\n" |
cryptoc | 0:9bb9ffde0d91 | 78 | "}\n" |
cryptoc | 0:9bb9ffde0d91 | 79 | "Outbound\n" |
cryptoc | 0:9bb9ffde0d91 | 80 | "{\n" |
cryptoc | 0:9bb9ffde0d91 | 81 | "msg=(This is an xAP message from mbed, Ethernet connected!)\n" |
cryptoc | 0:9bb9ffde0d91 | 82 | "num=(00447401696842)\n" |
cryptoc | 0:9bb9ffde0d91 | 83 | "}\n"; |
cryptoc | 0:9bb9ffde0d91 | 84 | |
cryptoc | 0:9bb9ffde0d91 | 85 | printf("Broadcasting...\n"); |
cryptoc | 0:9bb9ffde0d91 | 86 | printf( "bytes sent= %d\n",udp.sendTo(broadcast, packet_a, strlen(packet_a))); |
cryptoc | 0:9bb9ffde0d91 | 87 | |
cryptoc | 0:9bb9ffde0d91 | 88 | |
cryptoc | 0:9bb9ffde0d91 | 89 | while(true){ |
cryptoc | 0:9bb9ffde0d91 | 90 | |
cryptoc | 0:9bb9ffde0d91 | 91 | |
cryptoc | 0:9bb9ffde0d91 | 92 | reset_thread();// calling one_wire demo for returning temperature measurement and device ID |
cryptoc | 0:9bb9ffde0d91 | 93 | |
cryptoc | 0:9bb9ffde0d91 | 94 | |
cryptoc | 0:9bb9ffde0d91 | 95 | |
cryptoc | 0:9bb9ffde0d91 | 96 | sprintf(msg, "IButton thermometor ID %llX , temperature measured at %f \n",rom, temperature); |
cryptoc | 0:9bb9ffde0d91 | 97 | |
cryptoc | 0:9bb9ffde0d91 | 98 | smtp.setMessage(SUBJECT,msg); |
cryptoc | 0:9bb9ffde0d91 | 99 | smtp.addMessage(" It's exceeding previously set temperature threshold!! \r\n"); |
cryptoc | 0:9bb9ffde0d91 | 100 | |
cryptoc | 0:9bb9ffde0d91 | 101 | while(temperature> 10.0) { |
cryptoc | 0:9bb9ffde0d91 | 102 | printf("temperature alart\n"); |
cryptoc | 0:9bb9ffde0d91 | 103 | ret = smtp.sendmail(SERVER, USER, PWD, DOMAIN,PORT,SMTP_AUTH_NONE); |
cryptoc | 0:9bb9ffde0d91 | 104 | |
cryptoc | 0:9bb9ffde0d91 | 105 | if (ret) { |
cryptoc | 0:9bb9ffde0d91 | 106 | printf("E-mail Transmission Error\r\n"); |
cryptoc | 0:9bb9ffde0d91 | 107 | } |
cryptoc | 0:9bb9ffde0d91 | 108 | else { |
cryptoc | 0:9bb9ffde0d91 | 109 | printf("E-mail Transmission OK\r\n"); |
cryptoc | 0:9bb9ffde0d91 | 110 | } |
cryptoc | 0:9bb9ffde0d91 | 111 | wait(1.0); |
cryptoc | 0:9bb9ffde0d91 | 112 | break; |
cryptoc | 0:9bb9ffde0d91 | 113 | } |
cryptoc | 0:9bb9ffde0d91 | 114 | |
cryptoc | 0:9bb9ffde0d91 | 115 | Websocket ws("ws://sockets.mbed.org:443/ws/georg/rw");//"ws://sockets.mbed.org/ws/georg/rw" to view the dynamic reading |
cryptoc | 0:9bb9ffde0d91 | 116 | ws.connect(); |
cryptoc | 0:9bb9ffde0d91 | 117 | |
cryptoc | 0:9bb9ffde0d91 | 118 | sprintf(recv, "Temperature of device %llX is %f: \n",rom, temperature); |
cryptoc | 0:9bb9ffde0d91 | 119 | ws.send(recv); |
cryptoc | 0:9bb9ffde0d91 | 120 | temperature =0; |
cryptoc | 0:9bb9ffde0d91 | 121 | wait(2.0); |
cryptoc | 0:9bb9ffde0d91 | 122 | } |
cryptoc | 0:9bb9ffde0d91 | 123 | |
cryptoc | 0:9bb9ffde0d91 | 124 | |
cryptoc | 0:9bb9ffde0d91 | 125 | |
cryptoc | 0:9bb9ffde0d91 | 126 | } |