Test

Dependencies:   mbed as3935 ESP8266NodeMCUInterface

Committer:
starmanultra
Date:
Mon Nov 09 02:32:14 2020 +0000
Revision:
1:5508e5a66441
Parent:
0:577723025265
Child:
3:c69be808548f
Here is kind of the baseline of the lightning detecting unit

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