![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Test
Dependencies: mbed as3935 ESP8266NodeMCUInterface
main.cpp@1:5508e5a66441, 2020-11-09 (annotated)
- 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?
User | Revision | Line number | New 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 | } |