Basestation code for portable breathalyzer

Dependencies:   GP-20U7 PinDetect Servo mbed nRF24L01P

Fork of GP20U7_HelloWorld by Wesley Schon

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?

UserRevisionLine numberNew 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 }