Basestation code for portable breathalyzer
Dependencies: GP-20U7 PinDetect Servo mbed nRF24L01P
Fork of GP20U7_HelloWorld by
main.cpp@6:97dfabad83aa, 2016-12-05 (annotated)
- Committer:
- mmittal8
- Date:
- Mon Dec 05 16:35:26 2016 +0000
- Revision:
- 6:97dfabad83aa
- Parent:
- 4:55098dc5eb6c
Basestation for Breathalyzer
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wschon | 0:746d8bb63453 | 1 | #include "mbed.h" |
wschon | 0:746d8bb63453 | 2 | #include "GPS.h" |
mmittal8 | 6:97dfabad83aa | 3 | #include "Servo.h" |
mmittal8 | 6:97dfabad83aa | 4 | #include "PinDetect.h" |
mmittal8 | 6:97dfabad83aa | 5 | #include "nRF24L01P.h" |
mmittal8 | 6:97dfabad83aa | 6 | |
mmittal8 | 6:97dfabad83aa | 7 | nRF24L01P myTransceiver(p5, p6, p7, p8, p9, p10); // mosi, miso, sck, csn, ce, irq |
wschon | 0:746d8bb63453 | 8 | |
wschon | 0:746d8bb63453 | 9 | Serial pc(USBTX, USBRX); |
wschon | 0:746d8bb63453 | 10 | GPS gps(p13, p14); |
mmittal8 | 6:97dfabad83aa | 11 | PinDetect pb1(p19); |
mmittal8 | 6:97dfabad83aa | 12 | PinDetect pb2(p20); |
mmittal8 | 6:97dfabad83aa | 13 | Servo servo(p21); |
mmittal8 | 6:97dfabad83aa | 14 | |
mmittal8 | 6:97dfabad83aa | 15 | Serial esp(p28, p27); // tx, rx |
mmittal8 | 6:97dfabad83aa | 16 | DigitalOut reset(p26); |
mmittal8 | 6:97dfabad83aa | 17 | DigitalOut led1(LED1); |
mmittal8 | 6:97dfabad83aa | 18 | DigitalOut led2(LED2); |
mmittal8 | 6:97dfabad83aa | 19 | DigitalOut led3(LED3); |
mmittal8 | 6:97dfabad83aa | 20 | Timer t; |
mmittal8 | 6:97dfabad83aa | 21 | |
mmittal8 | 6:97dfabad83aa | 22 | bool drunk = true; |
mmittal8 | 6:97dfabad83aa | 23 | |
mmittal8 | 6:97dfabad83aa | 24 | int count,ended,timeout,killSwitch = 0,Sig = 0; |
mmittal8 | 6:97dfabad83aa | 25 | char buf[2024]; |
mmittal8 | 6:97dfabad83aa | 26 | char snd[1024]; |
mmittal8 | 6:97dfabad83aa | 27 | |
mmittal8 | 6:97dfabad83aa | 28 | char ssid[32] = "AndroidAP"; // enter WiFi router ssid inside the quotes |
mmittal8 | 6:97dfabad83aa | 29 | char pwd [32] = "ece4180a"; // enter WiFi router password inside the quotes |
mmittal8 | 6:97dfabad83aa | 30 | |
mmittal8 | 6:97dfabad83aa | 31 | void SendCMD(),getreply(),ESPconfig(),ESPsetbaudrate(),ESPServerSetup(); |
mmittal8 | 6:97dfabad83aa | 32 | |
mmittal8 | 6:97dfabad83aa | 33 | void signal(void){ |
mmittal8 | 6:97dfabad83aa | 34 | Sig = 1; |
mmittal8 | 6:97dfabad83aa | 35 | } |
mmittal8 | 6:97dfabad83aa | 36 | |
mmittal8 | 6:97dfabad83aa | 37 | void kill_switch(void){ |
mmittal8 | 6:97dfabad83aa | 38 | if (killSwitch == 0){ |
mmittal8 | 6:97dfabad83aa | 39 | killSwitch = 1; |
mmittal8 | 6:97dfabad83aa | 40 | } |
mmittal8 | 6:97dfabad83aa | 41 | } |
wschon | 0:746d8bb63453 | 42 | |
wschon | 0:746d8bb63453 | 43 | int main() { |
mmittal8 | 6:97dfabad83aa | 44 | pb1.mode(PullUp); |
mmittal8 | 6:97dfabad83aa | 45 | pb2.mode(PullUp); |
mmittal8 | 6:97dfabad83aa | 46 | |
mmittal8 | 6:97dfabad83aa | 47 | reset=0; //hardware reset for 8266 |
mmittal8 | 6:97dfabad83aa | 48 | pc.baud(9600); |
mmittal8 | 6:97dfabad83aa | 49 | wait(0.5); |
mmittal8 | 6:97dfabad83aa | 50 | reset=1; |
mmittal8 | 6:97dfabad83aa | 51 | |
mmittal8 | 6:97dfabad83aa | 52 | esp.baud(9600); |
mmittal8 | 6:97dfabad83aa | 53 | |
mmittal8 | 6:97dfabad83aa | 54 | pb1.attach_deasserted(&kill_switch); |
mmittal8 | 6:97dfabad83aa | 55 | pb1.setSampleFrequency(); |
mmittal8 | 6:97dfabad83aa | 56 | |
mmittal8 | 6:97dfabad83aa | 57 | pb2.attach_deasserted(&signal); |
mmittal8 | 6:97dfabad83aa | 58 | pb2.setSampleFrequency(); |
mmittal8 | 6:97dfabad83aa | 59 | |
mmittal8 | 6:97dfabad83aa | 60 | led1 = 0; |
mmittal8 | 6:97dfabad83aa | 61 | led2 = 0; |
mmittal8 | 6:97dfabad83aa | 62 | servo = 0; |
mmittal8 | 6:97dfabad83aa | 63 | while (1){ |
mmittal8 | 6:97dfabad83aa | 64 | if (killSwitch == 1){ |
mmittal8 | 6:97dfabad83aa | 65 | led2 = 1; |
mmittal8 | 6:97dfabad83aa | 66 | led1 = 1; |
mmittal8 | 6:97dfabad83aa | 67 | servo = 1.0; |
mmittal8 | 6:97dfabad83aa | 68 | ESPconfig(); |
mmittal8 | 6:97dfabad83aa | 69 | killSwitch = 2; |
mmittal8 | 6:97dfabad83aa | 70 | led1 = 0; |
wschon | 0:746d8bb63453 | 71 | } |
mmittal8 | 6:97dfabad83aa | 72 | if (Sig){ |
mmittal8 | 6:97dfabad83aa | 73 | if(drunk){ |
mmittal8 | 6:97dfabad83aa | 74 | servo = 1.0; |
mmittal8 | 6:97dfabad83aa | 75 | led3 = 1; |
mmittal8 | 6:97dfabad83aa | 76 | //wait(120); |
mmittal8 | 6:97dfabad83aa | 77 | if (drunk) |
mmittal8 | 6:97dfabad83aa | 78 | ESPServerSetup(); |
mmittal8 | 6:97dfabad83aa | 79 | } |
mmittal8 | 6:97dfabad83aa | 80 | else{ |
mmittal8 | 6:97dfabad83aa | 81 | servo = 0; |
mmittal8 | 6:97dfabad83aa | 82 | led2 = 0; |
mmittal8 | 6:97dfabad83aa | 83 | } |
mmittal8 | 6:97dfabad83aa | 84 | killSwitch = 0; |
mmittal8 | 6:97dfabad83aa | 85 | Sig = 0; |
mmittal8 | 6:97dfabad83aa | 86 | } |
mmittal8 | 6:97dfabad83aa | 87 | sleep(); |
wschon | 0:746d8bb63453 | 88 | } |
wschon | 0:746d8bb63453 | 89 | } |
wschon | 0:746d8bb63453 | 90 | |
mmittal8 | 6:97dfabad83aa | 91 | void ESPsetbaudrate() |
mmittal8 | 6:97dfabad83aa | 92 | { |
mmittal8 | 6:97dfabad83aa | 93 | strcpy(snd, "AT+CIOBAUD=115200\r\n"); // change the numeric value to the required baudrate |
mmittal8 | 6:97dfabad83aa | 94 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 95 | } |
wschon | 0:746d8bb63453 | 96 | |
mmittal8 | 6:97dfabad83aa | 97 | void ESPconfig() |
mmittal8 | 6:97dfabad83aa | 98 | { |
mmittal8 | 6:97dfabad83aa | 99 | pc.printf("---------- Reset & get Firmware ----------\r\n"); |
mmittal8 | 6:97dfabad83aa | 100 | strcpy(snd,"node.restart()\r\n"); |
mmittal8 | 6:97dfabad83aa | 101 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 102 | timeout=5; |
mmittal8 | 6:97dfabad83aa | 103 | getreply(); |
mmittal8 | 6:97dfabad83aa | 104 | |
mmittal8 | 6:97dfabad83aa | 105 | wait(2); |
mmittal8 | 6:97dfabad83aa | 106 | |
mmittal8 | 6:97dfabad83aa | 107 | pc.printf("\n---------- Connecting to AP ----------\r\n"); |
mmittal8 | 6:97dfabad83aa | 108 | pc.printf("ssid = %s pwd = %s\r\n",ssid,pwd); |
mmittal8 | 6:97dfabad83aa | 109 | strcpy(snd, "wifi.sta.config(\""); |
mmittal8 | 6:97dfabad83aa | 110 | strcat(snd, ssid); |
mmittal8 | 6:97dfabad83aa | 111 | strcat(snd, "\",\""); |
mmittal8 | 6:97dfabad83aa | 112 | strcat(snd, pwd); |
mmittal8 | 6:97dfabad83aa | 113 | strcat(snd, "\")\r\n"); |
mmittal8 | 6:97dfabad83aa | 114 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 115 | timeout=10; |
mmittal8 | 6:97dfabad83aa | 116 | getreply(); |
mmittal8 | 6:97dfabad83aa | 117 | pc.printf(buf); |
mmittal8 | 6:97dfabad83aa | 118 | |
mmittal8 | 6:97dfabad83aa | 119 | wait(5); |
mmittal8 | 6:97dfabad83aa | 120 | |
mmittal8 | 6:97dfabad83aa | 121 | pc.printf("\n---------- Get IP's ----------\r\n"); |
mmittal8 | 6:97dfabad83aa | 122 | strcpy(snd, "print(wifi.sta.getip())\r\n"); |
mmittal8 | 6:97dfabad83aa | 123 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 124 | timeout=3; |
mmittal8 | 6:97dfabad83aa | 125 | getreply(); |
mmittal8 | 6:97dfabad83aa | 126 | pc.printf(buf); |
mmittal8 | 6:97dfabad83aa | 127 | |
mmittal8 | 6:97dfabad83aa | 128 | wait(1); |
mmittal8 | 6:97dfabad83aa | 129 | } |
mmittal8 | 6:97dfabad83aa | 130 | |
mmittal8 | 6:97dfabad83aa | 131 | void ESPServerSetup(){ |
mmittal8 | 6:97dfabad83aa | 132 | while (!gps.sample()){ |
mmittal8 | 6:97dfabad83aa | 133 | wait(0.1); |
mmittal8 | 6:97dfabad83aa | 134 | } |
mmittal8 | 6:97dfabad83aa | 135 | pc.printf("\n---------- Setting up http server ----------\r\n"); |
mmittal8 | 6:97dfabad83aa | 136 | strcpy(snd, "srv=net.createServer(net.TCP)\r\n"); |
mmittal8 | 6:97dfabad83aa | 137 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 138 | wait(0.2); |
mmittal8 | 6:97dfabad83aa | 139 | strcpy(snd, "srv:listen(80,function(conn)\r\n"); |
mmittal8 | 6:97dfabad83aa | 140 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 141 | wait(0.2); |
mmittal8 | 6:97dfabad83aa | 142 | strcpy(snd, "conn:on(\"receive\",function(conn,payload)\r\n"); |
mmittal8 | 6:97dfabad83aa | 143 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 144 | wait(0.2); |
mmittal8 | 6:97dfabad83aa | 145 | strcpy(snd, "print(payload)\r\n"); |
mmittal8 | 6:97dfabad83aa | 146 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 147 | wait(0.2); |
mmittal8 | 6:97dfabad83aa | 148 | strcpy(snd, "conn:send(\"<!DOCTYPE html>\")\r\n"); |
mmittal8 | 6:97dfabad83aa | 149 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 150 | wait(0.2); |
mmittal8 | 6:97dfabad83aa | 151 | strcpy(snd, "conn:send(\"<html>\")\r\n"); |
mmittal8 | 6:97dfabad83aa | 152 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 153 | wait(0.2); |
mmittal8 | 6:97dfabad83aa | 154 | strcpy(snd, "conn:send(\"<h1> Come Pick Me up, I'm Drunk</h1>\")\r\n"); |
mmittal8 | 6:97dfabad83aa | 155 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 156 | wait(0.2); |
mmittal8 | 6:97dfabad83aa | 157 | gps.sample(); |
mmittal8 | 6:97dfabad83aa | 158 | int n = sprintf(snd, "conn:send(\"<h2>I'm at Longitude: %f degrees %c, Latitude %f degrees %c</h2>\")\r\n", gps.longitude, gps.ew, gps.latitude, gps.ns); |
mmittal8 | 6:97dfabad83aa | 159 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 160 | wait(0.2); |
mmittal8 | 6:97dfabad83aa | 161 | strcpy(snd, "conn:send(\"</html>\")\r\n"); |
mmittal8 | 6:97dfabad83aa | 162 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 163 | wait(0.2); |
mmittal8 | 6:97dfabad83aa | 164 | strcpy(snd, "end)\r\n"); |
mmittal8 | 6:97dfabad83aa | 165 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 166 | wait(0.2); |
mmittal8 | 6:97dfabad83aa | 167 | strcpy(snd, "conn:on(\"sent\",function(conn) conn:close() end)\r\n"); |
mmittal8 | 6:97dfabad83aa | 168 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 169 | wait(0.2); |
mmittal8 | 6:97dfabad83aa | 170 | strcpy(snd, "end)\r\n"); |
mmittal8 | 6:97dfabad83aa | 171 | SendCMD(); |
mmittal8 | 6:97dfabad83aa | 172 | wait(0.2); |
mmittal8 | 6:97dfabad83aa | 173 | timeout=5; |
mmittal8 | 6:97dfabad83aa | 174 | getreply(); |
mmittal8 | 6:97dfabad83aa | 175 | pc.printf(buf); |
mmittal8 | 6:97dfabad83aa | 176 | pc.printf("\r\nDONE"); |
mmittal8 | 6:97dfabad83aa | 177 | } |
mmittal8 | 6:97dfabad83aa | 178 | |
mmittal8 | 6:97dfabad83aa | 179 | void SendCMD() |
mmittal8 | 6:97dfabad83aa | 180 | { |
mmittal8 | 6:97dfabad83aa | 181 | esp.printf("%s", snd); |
mmittal8 | 6:97dfabad83aa | 182 | } |
mmittal8 | 6:97dfabad83aa | 183 | |
mmittal8 | 6:97dfabad83aa | 184 | void getreply() |
mmittal8 | 6:97dfabad83aa | 185 | { |
mmittal8 | 6:97dfabad83aa | 186 | memset(buf, '\0', sizeof(buf)); |
mmittal8 | 6:97dfabad83aa | 187 | t.start(); |
mmittal8 | 6:97dfabad83aa | 188 | ended=0; |
mmittal8 | 6:97dfabad83aa | 189 | count=0; |
mmittal8 | 6:97dfabad83aa | 190 | while(!ended) { |
mmittal8 | 6:97dfabad83aa | 191 | if(esp.readable()) { |
mmittal8 | 6:97dfabad83aa | 192 | buf[count] = esp.getc(); |
mmittal8 | 6:97dfabad83aa | 193 | count++; |
mmittal8 | 6:97dfabad83aa | 194 | } |
mmittal8 | 6:97dfabad83aa | 195 | if(t.read() > timeout) { |
mmittal8 | 6:97dfabad83aa | 196 | ended = 1; |
mmittal8 | 6:97dfabad83aa | 197 | t.stop(); |
mmittal8 | 6:97dfabad83aa | 198 | t.reset(); |
mmittal8 | 6:97dfabad83aa | 199 | } |
mmittal8 | 6:97dfabad83aa | 200 | } |
mmittal8 | 6:97dfabad83aa | 201 | } |