Test

Dependencies:   mbed as3935 ESP8266NodeMCUInterface

Committer:
starmanultra
Date:
Mon Nov 09 21:38:12 2020 +0000
Revision:
3:c69be808548f
Parent:
1:5508e5a66441
November 9, 2020

Who changed what in which revision?

UserRevisionLine numberNew contents of line
starmanultra 1:5508e5a66441 1 /*
starmanultra 1:5508e5a66441 2 Authors: Brian Harden + Stefan Abi-Karam + Larry Kresse
starmanultra 1:5508e5a66441 3 Class: ECE4180 - Fall 2020
starmanultra 1:5508e5a66441 4 Description: The purpose of this program is to set up a single mbed device
starmanultra 0:577723025265 5
starmanultra 1:5508e5a66441 6 BRIAN'S mBED MAC ADDRESS: 00:02:f7:f3:64:9f
starmanultra 1:5508e5a66441 7 BORROWED mBED MAC ADDRESS: 00:02:F7:F3:D2:C5
starmanultra 1:5508e5a66441 8 MAIN ESP8266 IP ADDRESS: 143.215.99.29
starmanultra 1:5508e5a66441 9 BORROWED mBED IP ADDRESS: 143.215.104.115
starmanultra 1:5508e5a66441 10 MAIN ESP8266 MAC ADDRESS: 18-FE-34-05-99-F8
starmanultra 1:5508e5a66441 11 BORROW ESP8266 MAC ADDRESS: 18-FE-34-0D-CB-40
starmanultra 1:5508e5a66441 12
starmanultra 1:5508e5a66441 13 */
starmanultra 1:5508e5a66441 14
starmanultra 1:5508e5a66441 15
starmanultra 1:5508e5a66441 16 #include <string>
starmanultra 1:5508e5a66441 17 #include "mbed.h"
starmanultra 1:5508e5a66441 18 #include "ESP8266.h"
starmanultra 1:5508e5a66441 19 #include "AS3935.h"
starmanultra 1:5508e5a66441 20
starmanultra 1:5508e5a66441 21 #define LIGHTNINGDETECTORID 1
starmanultra 0:577723025265 22
starmanultra 1:5508e5a66441 23 //DECLARATIONS: STRUCTS
starmanultra 1:5508e5a66441 24 // Struct to send over TCP
starmanultra 1:5508e5a66441 25 struct DATA
starmanultra 1:5508e5a66441 26 {
starmanultra 1:5508e5a66441 27 char detectorID;
starmanultra 1:5508e5a66441 28 char distanceKM;
starmanultra 1:5508e5a66441 29 unsigned long time;
starmanultra 1:5508e5a66441 30 };
starmanultra 3:c69be808548f 31
starmanultra 3:c69be808548f 32 union rawReceivedData
starmanultra 3:c69be808548f 33 {
starmanultra 3:c69be808548f 34 struct DATA struc;
starmanultra 3:c69be808548f 35 char dataString[sizeof(DATA)];
starmanultra 3:c69be808548f 36 };
starmanultra 3:c69be808548f 37
starmanultra 1:5508e5a66441 38 //using namespace std::chrono
starmanultra 1:5508e5a66441 39 //DECLARATIONS: GLOBAL VARIABLES
starmanultra 1:5508e5a66441 40 DigitalOut led1(LED1); //DEBUGGING: On-board LED used for debugging purposes
starmanultra 1:5508e5a66441 41 DigitalOut led2(LED2); //DEBUGGING: On-board LED used for debugging purposes
starmanultra 1:5508e5a66441 42 DigitalOut led4(LED4); //DEBUGGING: On-board LED used for debugging purposes
starmanultra 1:5508e5a66441 43 char dataTEMP[8] = "5"; //DEBUGGING: A buffer to store the incoming data
starmanultra 1:5508e5a66441 44 Serial pc(USBTX, USBRX); //Set up the mbed USB port for debugging/monitoring
starmanultra 1:5508e5a66441 45 Timer clocky; //A clock used to log the time of each lightning strike
starmanultra 1:5508e5a66441 46 ESP8266 wifi(p28, p27, p26, 9600, 3000); //The WiFi module
starmanultra 1:5508e5a66441 47 AS3935 ld(p11, p12, p13, p14, "ld", 2000000); //MOSI, MISO, SCK, CS, SPI bus freq (hz)
starmanultra 1:5508e5a66441 48 InterruptIn as3935INT(p15); //Interrupt signal that is given by the AS3935 Lightning Detector
starmanultra 1:5508e5a66441 49 DigitalOut wifiRST(p26); //Reset signal to the ESP8266 Device
starmanultra 1:5508e5a66441 50 char ssid[32] = "GTother"; //enter WiFi router ssid inside the quotes
starmanultra 1:5508e5a66441 51 char pwd [32] = "GeorgeP@1927"; //enter WiFi router password inside the quotes
starmanultra 3:c69be808548f 52 char serverIP [32] = "143.215.99.29"; //The server IP to connect to (the main mBed)
starmanultra 3:c69be808548f 53 //char serverIP [32] = "143.215.104.115"; //The server IP to connect to (the main mBed)
starmanultra 1:5508e5a66441 54 Timer timeoutTimer; //A timer in case of ESP8266 timeouts
starmanultra 1:5508e5a66441 55 unsigned int timeout; //A maximum time (in seconds) before timeout
starmanultra 1:5508e5a66441 56 int county; //A counter for timeouts in the ESP8266
starmanultra 1:5508e5a66441 57 bool ended; //A boolean letting us know when the ESP8266's role is terminated
starmanultra 3:c69be808548f 58 union rawReceivedData dataToSend; //A struct to send over TCP to the server
starmanultra 3:c69be808548f 59
starmanultra 1:5508e5a66441 60
starmanultra 1:5508e5a66441 61 //DECLARATIONS: FUNCTION PROTOTYPES
starmanultra 1:5508e5a66441 62 void LightningDetected(); //Interrupt routine to handle the event of lightning occurring
starmanultra 1:5508e5a66441 63 void SetupTransmitter(); //Sets up the WiFi card for transmitting
starmanultra 1:5508e5a66441 64 void SetupLightningDetector(); //Sets up the AS3935 lightning detector
starmanultra 1:5508e5a66441 65 void dev_recv(); //DEBUGGING: Write out any errors that may occur within the WiFi module
starmanultra 1:5508e5a66441 66 void pc_recv(); //DEBUGGING: Write out any errors that may occur within the WiFi module
starmanultra 1:5508e5a66441 67
starmanultra 1:5508e5a66441 68 /*******************************************************************************
starmanultra 1:5508e5a66441 69 MAIN FUNCTION
starmanultra 1:5508e5a66441 70 *******************************************************************************/
starmanultra 1:5508e5a66441 71
starmanultra 1:5508e5a66441 72 int main()
starmanultra 1:5508e5a66441 73 {
starmanultra 1:5508e5a66441 74 wifiRST = 0; //Reset the ESP8266
starmanultra 1:5508e5a66441 75 wait(0.5); //Give it a little time to fully reset
starmanultra 1:5508e5a66441 76 wifiRST = 1; //Raise the reset pin
starmanultra 1:5508e5a66441 77 wait(1); //Give it a second to re-initialize
starmanultra 1:5508e5a66441 78 //Set up the transmitter
starmanultra 1:5508e5a66441 79 SetupTransmitter();
starmanultra 1:5508e5a66441 80 //Initialize the lightning detector
starmanultra 1:5508e5a66441 81 SetupLightningDetector();
starmanultra 1:5508e5a66441 82 pc.printf("Ready!\r\n");
starmanultra 1:5508e5a66441 83 clocky.start();
starmanultra 3:c69be808548f 84 dataToSend.struc.distanceKM = 5;
starmanultra 3:c69be808548f 85 dataToSend.struc.detectorID = 1;
starmanultra 3:c69be808548f 86 dataToSend.struc.time = 0x0F;
starmanultra 1:5508e5a66441 87 while(1)
starmanultra 1:5508e5a66441 88 {
starmanultra 1:5508e5a66441 89 //Blinky
starmanultra 3:c69be808548f 90 pc.printf("Test packet send!");
starmanultra 3:c69be808548f 91 wifi.send((char *)dataToSend.dataString, sizeof(DATA)); //Send the data
starmanultra 3:c69be808548f 92 wait(3);
starmanultra 1:5508e5a66441 93 led1 = !led1;
starmanultra 1:5508e5a66441 94 //sleep(1);
starmanultra 0:577723025265 95 }
starmanultra 0:577723025265 96 }
starmanultra 1:5508e5a66441 97
starmanultra 1:5508e5a66441 98 /**************************
starmanultra 1:5508e5a66441 99 LIGHTNING DETECTED
starmanultra 1:5508e5a66441 100 ***************************/
starmanultra 1:5508e5a66441 101 //Summary: The AS3935 breakout board will send the INT signal high when it
starmanultra 1:5508e5a66441 102 // detects lightning. This interrupt function is designed to handle the
starmanultra 1:5508e5a66441 103 // interrupt in the event of lightning being detected
starmanultra 1:5508e5a66441 104 void LightningDetected()
starmanultra 1:5508e5a66441 105 {
starmanultra 1:5508e5a66441 106 clocky.stop();
starmanultra 1:5508e5a66441 107 led1 = 1;
starmanultra 1:5508e5a66441 108 char OriginInt;
starmanultra 1:5508e5a66441 109 wait_ms(2);
starmanultra 1:5508e5a66441 110 OriginInt = ld.interruptSource();
starmanultra 1:5508e5a66441 111 if (OriginInt == 1)
starmanultra 1:5508e5a66441 112 { //
starmanultra 1:5508e5a66441 113 pc.printf(" Noise level too high\r\n");
starmanultra 1:5508e5a66441 114 }
starmanultra 1:5508e5a66441 115 if (OriginInt == 4)
starmanultra 1:5508e5a66441 116 { //
starmanultra 1:5508e5a66441 117 pc.printf(" Disturber\r\n");
starmanultra 1:5508e5a66441 118 }
starmanultra 1:5508e5a66441 119 if (OriginInt == 8)
starmanultra 1:5508e5a66441 120 { // detection
starmanultra 1:5508e5a66441 121 // pc.printf(" Lightning detection\r\n");
starmanultra 1:5508e5a66441 122 dataTEMP[0] = ld.lightningDistanceKm(); //Shove the distance into index 0
starmanultra 3:c69be808548f 123 dataToSend.struc.distanceKM = dataTEMP[0]; //Shove the distance into the struct
starmanultra 3:c69be808548f 124 pc.printf("Lightning detection, distance=%dm\r\n", dataTEMP[0]);
starmanultra 1:5508e5a66441 125 pc.printf("Energy %d\r\n", ld.getEnergy());
starmanultra 1:5508e5a66441 126 ld.clearStats(); //Clear the contents and get
starmanultra 1:5508e5a66441 127 }
starmanultra 1:5508e5a66441 128 dataTEMP[1] = (char)LIGHTNINGDETECTORID; //Shove the detector's ID into index 1
starmanultra 3:c69be808548f 129 dataToSend.struc.detectorID = (char)LIGHTNINGDETECTORID; //Shove thed etector's dsitance into the struct
starmanultra 3:c69be808548f 130 dataToSend.struc.time = clocky.read(); //Shove the time in milliseconds into the struct
starmanultra 1:5508e5a66441 131 wait(0.5);
starmanultra 3:c69be808548f 132 //wifi.send((char *)dataToSend.dataString, sizeof(DATA)); //Send the data
starmanultra 3:c69be808548f 133 clocky.start(); //Start the clock again
starmanultra 1:5508e5a66441 134
starmanultra 1:5508e5a66441 135 //TODO: Send the struct
starmanultra 1:5508e5a66441 136
starmanultra 1:5508e5a66441 137 }
starmanultra 1:5508e5a66441 138
starmanultra 1:5508e5a66441 139 /**************************
starmanultra 1:5508e5a66441 140 SETUP - ESP8266 WIFI MODULE
starmanultra 1:5508e5a66441 141 ***************************/
starmanultra 1:5508e5a66441 142 //Summary: This function will set up the transmitting ESP8266 module so that
starmanultra 1:5508e5a66441 143 // it will send data to the corresponding ESP8266 server with the interrupt
starmanultra 1:5508e5a66441 144 // data
starmanultra 1:5508e5a66441 145 void SetupTransmitter()
starmanultra 1:5508e5a66441 146 {
starmanultra 1:5508e5a66441 147 wifi.init(); //Initialize the ESP8266 module (using resets contained in the class)
starmanultra 1:5508e5a66441 148 wifi.connect(ssid, pwd); //Connect using the SSID and Password
starmanultra 1:5508e5a66441 149 //Keep re-trying to gain a connection to an access point
starmanultra 1:5508e5a66441 150 while(!(wifi.is_connected()))
starmanultra 1:5508e5a66441 151 {
starmanultra 1:5508e5a66441 152 wait(2);
starmanultra 1:5508e5a66441 153 pc.printf("Connecting to AP...\r\n");
starmanultra 1:5508e5a66441 154 }
starmanultra 1:5508e5a66441 155 //Keep re-trying to connect to the main device
starmanultra 1:5508e5a66441 156 while(!(wifi.open(true, serverIP, 80, -1)))
starmanultra 1:5508e5a66441 157 {
starmanultra 1:5508e5a66441 158 wait(2);
starmanultra 1:5508e5a66441 159 pc.printf("Connecting to server...\r\n");
starmanultra 1:5508e5a66441 160 }
starmanultra 1:5508e5a66441 161 }
starmanultra 1:5508e5a66441 162
starmanultra 1:5508e5a66441 163 /**************************
starmanultra 1:5508e5a66441 164 SETUP - AS3935 LIGHTNING DETECTOR
starmanultra 1:5508e5a66441 165 ***************************/
starmanultra 1:5508e5a66441 166 //Summary: This function sets up the lightning detector so that it may handle
starmanultra 1:5508e5a66441 167 // lightning strikes
starmanultra 1:5508e5a66441 168 void SetupLightningDetector()
starmanultra 1:5508e5a66441 169 {
starmanultra 1:5508e5a66441 170 ld.setTuneCap(1); //500kHz
starmanultra 1:5508e5a66441 171 ld.setOutdoors(); //Scale it for indoors experiments
starmanultra 1:5508e5a66441 172 ld.setMinimumLightnings(1); //Set it so it only needs one lightning strike to trigger
starmanultra 1:5508e5a66441 173 ld.setNoiseFloor(2);
starmanultra 1:5508e5a66441 174 ld.disableDisturbers(); //Stop making it whine about noise
starmanultra 1:5508e5a66441 175 ld.setWatchdogThreshold(2); //2 Second watchdog
starmanultra 1:5508e5a66441 176 as3935INT.rise(&LightningDetected); //Set it so that the interrupt function goes high when lightning is detected
starmanultra 1:5508e5a66441 177 }
starmanultra 1:5508e5a66441 178
starmanultra 1:5508e5a66441 179 /**************************
starmanultra 1:5508e5a66441 180 DEBUGGING - Receiving ESP8266 Data
starmanultra 1:5508e5a66441 181 ***************************/
starmanultra 1:5508e5a66441 182 //Summary: This function will emplace any characters received by the
starmanultra 1:5508e5a66441 183 // ESP8266 module to the PC terminal
starmanultra 1:5508e5a66441 184 void dev_recv()
starmanultra 1:5508e5a66441 185 {
starmanultra 1:5508e5a66441 186 led1 = !led1;
starmanultra 1:5508e5a66441 187 wait(0.5);
starmanultra 1:5508e5a66441 188 while(wifi.readable())
starmanultra 1:5508e5a66441 189 {
starmanultra 1:5508e5a66441 190 pc.putc(wifi.getc()); //Emplace characters from the ESP8266 to the PC
starmanultra 1:5508e5a66441 191 }
starmanultra 1:5508e5a66441 192 }
starmanultra 1:5508e5a66441 193
starmanultra 1:5508e5a66441 194 /**************************
starmanultra 1:5508e5a66441 195 DEBUGGING - Placing ESP8266 Data
starmanultra 1:5508e5a66441 196 ***************************/
starmanultra 1:5508e5a66441 197 //Summary: This function will emplace any characters sent from the PC
starmanultra 1:5508e5a66441 198 // terminal into the ESP8266 module
starmanultra 1:5508e5a66441 199 void pc_recv()
starmanultra 1:5508e5a66441 200 {
starmanultra 1:5508e5a66441 201 led4 = !led4;
starmanultra 1:5508e5a66441 202 while(pc.readable())
starmanultra 1:5508e5a66441 203 {
starmanultra 1:5508e5a66441 204 wifi.putc(pc.getc()); //Emplace characters from the PC to the ESP8266
starmanultra 1:5508e5a66441 205 }
starmanultra 1:5508e5a66441 206 }