Basestation code for portable breathalyzer

Dependencies:   GP-20U7 PinDetect Servo mbed nRF24L01P

Fork of GP20U7_HelloWorld by Wesley Schon

Revision:
6:97dfabad83aa
Parent:
4:55098dc5eb6c
--- a/main.cpp	Thu Mar 17 19:33:05 2016 +0000
+++ b/main.cpp	Mon Dec 05 16:35:26 2016 +0000
@@ -1,45 +1,201 @@
 #include "mbed.h"
 #include "GPS.h"
+#include "Servo.h"
+#include "PinDetect.h"
+#include "nRF24L01P.h"
+
+nRF24L01P myTransceiver(p5, p6, p7, p8, p9, p10);    // mosi, miso, sck, csn, ce, irq
 
 Serial pc(USBTX, USBRX);
 GPS gps(p13, p14);
+PinDetect pb1(p19);
+PinDetect pb2(p20);
+Servo servo(p21);
+
+Serial esp(p28, p27); // tx, rx
+DigitalOut reset(p26);
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+Timer t;
+
+bool drunk = true;
+
+int  count,ended,timeout,killSwitch = 0,Sig = 0;
+char buf[2024];
+char snd[1024];
+ 
+char ssid[32] = "AndroidAP";     // enter WiFi router ssid inside the quotes
+char pwd [32] = "ece4180a"; // enter WiFi router password inside the quotes
+
+void SendCMD(),getreply(),ESPconfig(),ESPsetbaudrate(),ESPServerSetup();
+
+void signal(void){
+    Sig = 1;
+}
+
+void kill_switch(void){
+    if (killSwitch == 0){
+        killSwitch = 1;
+    }
+}
 
 int main() {
-    //pc.printf("start main\r\n");
-    while(1) {
-        //wait(0.1);
-        //pc.printf("\nHello world\n\r");
-        //printf ("\n\r the value of GPS sample is : %d\n\r", gps.sample());
-        if(gps.sample()) {
-            //pc.printf("\r\nsampled\r\n");
-            pc.printf("Longitude: %f degrees %c\n\rLatitude: %f degrees %c\n\rAltitude: %f meters \n\rUTC time: %f\n\r", gps.longitude, gps.ns, gps.latitude, gps.ew, gps.alt, gps.time);
-            //pc.printf("good\r\n");
-        } else {
-            pc.printf("Oh Dear! No lock :(\n\r");
-            //pc.printf("bad\r\n");
+    pb1.mode(PullUp);
+    pb2.mode(PullUp);
+    
+    reset=0; //hardware reset for 8266
+    pc.baud(9600);
+    wait(0.5);
+    reset=1;
+    
+    esp.baud(9600);
+    
+    pb1.attach_deasserted(&kill_switch);
+    pb1.setSampleFrequency();
+    
+    pb2.attach_deasserted(&signal);
+    pb2.setSampleFrequency();
+    
+    led1 = 0;
+    led2 = 0;
+    servo = 0;
+    while (1){
+        if (killSwitch == 1){
+            led2 = 1;
+            led1 = 1;
+            servo = 1.0;
+            ESPconfig();
+            killSwitch = 2;
+            led1 = 0;
         }
+        if (Sig){
+            if(drunk){
+                servo = 1.0;
+                led3 = 1;
+                //wait(120);
+                if (drunk)
+                    ESPServerSetup();
+            }
+            else{
+                servo = 0;
+                led2 = 0;
+            }
+            killSwitch = 0;
+            Sig = 0;
+        }
+        sleep();
     }
 }
 
+void ESPsetbaudrate()
+{
+    strcpy(snd, "AT+CIOBAUD=115200\r\n");   // change the numeric value to the required baudrate
+    SendCMD();
+}
 
-/*
-$GPRMC,000115.039,V,,,,,,,291006,,*2C
-$GPGGA,000116.031,,,,,0,00,,,M,0.0,M,,0000*52
-$GPGSA,A,1,,,,,,,,,,,,,,,*1E
-$GPGSV,3,1,12,20,00,000,,10,00,000,,31,00,000,,27,00,000,*7C
-$GPGSV,3,2,12,19,00,000,,07,00,000,,04,00,000,,24,00,000,*76
-$GPGSV,3,3,12,16,00,000,,28,00,000,,26,00,000,,29,00,000,*78
-$GPRMC,000116.031,V,,,,,,,291006,,*27
-$GPGGA,000117.035,,,,,0,00,,,M,0.0,M,,0000*57
-$GPGSA,A,1,,,,,,,,,,,,,,,*1E
-$GPRMC,000117.035,V,,,,,,,291006,,*22
-$GPGGA,000118.039,,,,,0,00,,,M,0.0,M,,0000*54
-$GPGSA,A,1,,,,,,,,,,,,,,,*1E
-$GPRMC,000118.039,V,,,,,,,291006,,*21
-$GPGGA,000119.035,,,,,0,00,,,M,0.0,M,,0000*59
-$GPGSA,A,1,,,,,,,,,,,,,,,*1E
-$GPRMC,000119.035,V,,,,,,,291006,,*2C
-$GPGGA,000120.037,,,,,0,00,,,M,0.0,M,,0000*51
-$GPGSA,A,1,,,,,,,,,,,,,,,*1E
-$GPRMC,000120.037,V,,,,,,,291006,,*24
-*/
\ No newline at end of file
+void ESPconfig()
+{
+    pc.printf("---------- Reset & get Firmware ----------\r\n");
+    strcpy(snd,"node.restart()\r\n");
+    SendCMD();
+    timeout=5;
+    getreply();
+    
+    wait(2);
+ 
+    pc.printf("\n---------- Connecting to AP ----------\r\n");
+    pc.printf("ssid = %s   pwd = %s\r\n",ssid,pwd);
+    strcpy(snd, "wifi.sta.config(\"");
+    strcat(snd, ssid);
+    strcat(snd, "\",\"");
+    strcat(snd, pwd);
+    strcat(snd, "\")\r\n");
+    SendCMD();
+    timeout=10;
+    getreply();
+    pc.printf(buf);
+ 
+    wait(5);
+ 
+    pc.printf("\n---------- Get IP's ----------\r\n");
+    strcpy(snd, "print(wifi.sta.getip())\r\n");
+    SendCMD();
+    timeout=3;
+    getreply();
+    pc.printf(buf);
+ 
+    wait(1);       
+}
+
+void ESPServerSetup(){
+    while (!gps.sample()){
+        wait(0.1);
+    }
+    pc.printf("\n---------- Setting up http server ----------\r\n");
+        strcpy(snd, "srv=net.createServer(net.TCP)\r\n");
+        SendCMD();
+        wait(0.2);
+        strcpy(snd, "srv:listen(80,function(conn)\r\n");
+        SendCMD();
+        wait(0.2);
+        strcpy(snd, "conn:on(\"receive\",function(conn,payload)\r\n");
+        SendCMD();
+        wait(0.2);
+        strcpy(snd, "print(payload)\r\n");
+        SendCMD();
+        wait(0.2);
+        strcpy(snd, "conn:send(\"<!DOCTYPE html>\")\r\n");
+        SendCMD();
+        wait(0.2);
+        strcpy(snd, "conn:send(\"<html>\")\r\n");
+        SendCMD();
+        wait(0.2);
+        strcpy(snd, "conn:send(\"<h1> Come Pick Me up, I'm Drunk</h1>\")\r\n");
+        SendCMD();
+        wait(0.2);
+        gps.sample();
+        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);
+        SendCMD();
+        wait(0.2);
+        strcpy(snd, "conn:send(\"</html>\")\r\n");
+        SendCMD();
+        wait(0.2);
+        strcpy(snd, "end)\r\n");
+        SendCMD();
+        wait(0.2);
+        strcpy(snd, "conn:on(\"sent\",function(conn) conn:close() end)\r\n");
+        SendCMD();
+        wait(0.2);
+        strcpy(snd, "end)\r\n");
+        SendCMD();
+        wait(0.2);
+        timeout=5;
+        getreply();
+        pc.printf(buf);
+        pc.printf("\r\nDONE");
+}
+
+void SendCMD()
+{
+    esp.printf("%s", snd);
+}
+ 
+void getreply()
+{
+    memset(buf, '\0', sizeof(buf));
+    t.start();
+    ended=0;
+    count=0;
+    while(!ended) {
+        if(esp.readable()) {
+            buf[count] = esp.getc();
+            count++;
+        }
+        if(t.read() > timeout) {
+            ended = 1;
+            t.stop();
+            t.reset();
+        }
+    }
+}
\ No newline at end of file