![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Test
Dependencies: mbed as3935 ESP8266NodeMCUInterface
main.cpp@3:c69be808548f, 2020-11-09 (annotated)
- 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?
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 | 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 | } |