Test code to interface AOD UPAS with IoT provider.
Dependencies: ESP8266_AT NCP5623BMUTBG mbed ADS1115 AOD_Calculation BME280 PMS5003 SunPosition CAM_M8
main.cpp@2:3df874f33c42, 2017-11-22 (annotated)
- Committer:
- eawendtjr
- Date:
- Wed Nov 22 04:47:21 2017 +0000
- Revision:
- 2:3df874f33c42
- Parent:
- 1:702f144a88b2
- Child:
- 3:f878eab2ebe0
Posts random numbers to Thingspeak from the CEAMS sampler.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
eawendtjr | 0:62df2a5864d5 | 1 | #include "mbed.h" |
eawendtjr | 0:62df2a5864d5 | 2 | #include "NCP5623BMUTBG.h" |
eawendtjr | 0:62df2a5864d5 | 3 | #include "ESP8266_AT.h" |
eawendtjr | 0:62df2a5864d5 | 4 | |
eawendtjr | 0:62df2a5864d5 | 5 | ///////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 6 | //Define core buses and pin states. |
eawendtjr | 0:62df2a5864d5 | 7 | ///////////////////////////////////////////// |
eawendtjr | 2:3df874f33c42 | 8 | I2C i2c(PB_9, PB_8);//(D14, D15); SDA,SCL |
eawendtjr | 2:3df874f33c42 | 9 | Serial pc(USBTX, USBRX); |
eawendtjr | 2:3df874f33c42 | 10 | DigitalOut pumps(PA_9, 0);//(D8, 0); |
eawendtjr | 2:3df874f33c42 | 11 | DigitalOut pbKill(PC_12, 1); // Digital input pin that conncect to the LTC2950 battery charger used to shutdown the UPAS |
eawendtjr | 2:3df874f33c42 | 12 | DigitalIn nINT(PA_15); //Connected but currently unused is a digital ouput pin from LTC2950 battery charger. http://cds.linear.com/docs/en/datasheet/295012fd.pdf |
eawendtjr | 2:3df874f33c42 | 13 | NCP5623BMUTBG RGB_LED(PB_9, PB_8); //(D14, D15); |
eawendtjr | 0:62df2a5864d5 | 14 | |
eawendtjr | 0:62df2a5864d5 | 15 | ///////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 16 | //RN4677 BT/BLE Module |
eawendtjr | 0:62df2a5864d5 | 17 | ///////////////////////////////////////////// |
eawendtjr | 2:3df874f33c42 | 18 | Serial ble(PB_10, PB_11); |
eawendtjr | 2:3df874f33c42 | 19 | DigitalOut bleRTS(PB_14, 0); |
eawendtjr | 2:3df874f33c42 | 20 | DigitalOut bleCTS(PB_13, 0); |
eawendtjr | 2:3df874f33c42 | 21 | DigitalOut BT_IRST(PC_8, 0); |
eawendtjr | 2:3df874f33c42 | 22 | DigitalOut BT_SW(PA_12, 0); |
eawendtjr | 0:62df2a5864d5 | 23 | |
eawendtjr | 0:62df2a5864d5 | 24 | |
eawendtjr | 0:62df2a5864d5 | 25 | ///////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 26 | //Analog to Digital Converter |
eawendtjr | 0:62df2a5864d5 | 27 | ///////////////////////////////////////////// |
eawendtjr | 2:3df874f33c42 | 28 | DigitalIn ADS_ALRT(PA_10); //Connected but currently unused. (ADS1115) http://www.ti.com/lit/ds/symlink/ads1115.pdf |
eawendtjr | 0:62df2a5864d5 | 29 | |
eawendtjr | 0:62df2a5864d5 | 30 | ///////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 31 | //Battery, Charger, & Supply Monitoring |
eawendtjr | 0:62df2a5864d5 | 32 | ///////////////////////////////////////////// |
eawendtjr | 2:3df874f33c42 | 33 | DigitalIn LTCALT(PB_2); //High for normal operation. Low when a threshold is exceeded for Voltage, gas gauge, or temp |
eawendtjr | 2:3df874f33c42 | 34 | DigitalIn bcs1(PC_9); //Batt charging if High. (BQ24100)[U23] |
eawendtjr | 2:3df874f33c42 | 35 | DigitalIn bcs2(PA_8); //Charge complete if High. (BQ24100)[U23] |
eawendtjr | 2:3df874f33c42 | 36 | DigitalIn bc_npg(PB_1); //Power to the charge controller. (BQ24100)[U23] |
eawendtjr | 2:3df874f33c42 | 37 | DigitalIn SW3flt(PC_4); //When EN = 0 pin is HIGH, When EN = 1, LOW can be current limit, thermal limit, or UVLO. |
eawendtjr | 0:62df2a5864d5 | 38 | |
eawendtjr | 0:62df2a5864d5 | 39 | ///////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 40 | //Sensirion SDP3X(s) |
eawendtjr | 0:62df2a5864d5 | 41 | ///////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 42 | DigitalIn SDP3Xflt(PC_0); |
eawendtjr | 0:62df2a5864d5 | 43 | DigitalIn SDP3XAltflt(PB_7); |
eawendtjr | 0:62df2a5864d5 | 44 | |
eawendtjr | 0:62df2a5864d5 | 45 | ///////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 46 | //Accelerometer and Magnometer |
eawendtjr | 0:62df2a5864d5 | 47 | ///////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 48 | DigitalOut iNemoEnable(PA_1, 0); |
eawendtjr | 0:62df2a5864d5 | 49 | DigitalIn iNemoReady(PB_0); |
eawendtjr | 0:62df2a5864d5 | 50 | DigitalIn iNemoInt1(PC_5); |
eawendtjr | 0:62df2a5864d5 | 51 | DigitalIn iNemoInt2(PC_6); |
eawendtjr | 0:62df2a5864d5 | 52 | DigitalIn iNemoInt3(PC_7); |
eawendtjr | 0:62df2a5864d5 | 53 | |
eawendtjr | 0:62df2a5864d5 | 54 | ///////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 55 | //UV and Visible Light Sensor |
eawendtjr | 0:62df2a5864d5 | 56 | ///////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 57 | |
eawendtjr | 0:62df2a5864d5 | 58 | ///////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 59 | //GPS |
eawendtjr | 0:62df2a5864d5 | 60 | ///////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 61 | DigitalOut gpsEN(PB_15, 0); |
eawendtjr | 0:62df2a5864d5 | 62 | DigitalIn gpsENFault(PB_12); |
eawendtjr | 0:62df2a5864d5 | 63 | |
eawendtjr | 0:62df2a5864d5 | 64 | |
eawendtjr | 0:62df2a5864d5 | 65 | ///////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 66 | //SD Card |
eawendtjr | 0:62df2a5864d5 | 67 | ///////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 68 | DigitalIn sdCD(PA_11); |
eawendtjr | 0:62df2a5864d5 | 69 | DigitalOut sdClk(PB_3,0 ); |
eawendtjr | 0:62df2a5864d5 | 70 | DigitalIn sdMISO(PB_4); |
eawendtjr | 0:62df2a5864d5 | 71 | DigitalOut sdMOSI(PB_5, 0); |
eawendtjr | 0:62df2a5864d5 | 72 | DigitalOut sdCS(PB_6, 1); |
eawendtjr | 0:62df2a5864d5 | 73 | |
eawendtjr | 0:62df2a5864d5 | 74 | DigitalIn pbIso(PA_0); |
eawendtjr | 0:62df2a5864d5 | 75 | DigitalOut hFault1(PA_7, 0); |
eawendtjr | 0:62df2a5864d5 | 76 | DigitalOut hFault2(PA_6, 0); |
eawendtjr | 0:62df2a5864d5 | 77 | DigitalOut hFault3(PA_5, 0); |
eawendtjr | 0:62df2a5864d5 | 78 | DigitalOut hFault4(PA_4, 0); |
eawendtjr | 0:62df2a5864d5 | 79 | |
eawendtjr | 0:62df2a5864d5 | 80 | DigitalOut wifiNReset(PC_1, 0); |
eawendtjr | 0:62df2a5864d5 | 81 | DigitalOut wifiEnable(PC_2, 0); |
eawendtjr | 0:62df2a5864d5 | 82 | DigitalOut qdEnable(PC_3, 0); |
eawendtjr | 0:62df2a5864d5 | 83 | DigitalIn qdFault(PC_13); |
eawendtjr | 0:62df2a5864d5 | 84 | |
eawendtjr | 0:62df2a5864d5 | 85 | ESP8266_AT esp(PC_10, PC_11); |
eawendtjr | 0:62df2a5864d5 | 86 | |
eawendtjr | 1:702f144a88b2 | 87 | Timer t; |
eawendtjr | 1:702f144a88b2 | 88 | |
eawendtjr | 1:702f144a88b2 | 89 | char ssid[] = "VOLTAR"; |
eawendtjr | 1:702f144a88b2 | 90 | char password[] = "CedhCedh"; |
eawendtjr | 1:702f144a88b2 | 91 | char server[] = "api.thingspeak.com"; |
eawendtjr | 1:702f144a88b2 | 92 | char apiKey[] = "SU35AOKAZ30E0CAX"; |
eawendtjr | 1:702f144a88b2 | 93 | char conn_type[] = "TCP"; |
eawendtjr | 1:702f144a88b2 | 94 | |
eawendtjr | 0:62df2a5864d5 | 95 | // For selecting the WiFi UART |
eawendtjr | 0:62df2a5864d5 | 96 | const int addr = 0x3F << 1; |
eawendtjr | 0:62df2a5864d5 | 97 | char aod_sel_5on[1]; |
eawendtjr | 0:62df2a5864d5 | 98 | char aod_sel_5off[1]; |
eawendtjr | 0:62df2a5864d5 | 99 | char plant_sel[1]; |
eawendtjr | 0:62df2a5864d5 | 100 | |
eawendtjr | 0:62df2a5864d5 | 101 | ////////////////////////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 102 | //Main Function |
eawendtjr | 0:62df2a5864d5 | 103 | ////////////////////////////////////////////////////////////// |
eawendtjr | 0:62df2a5864d5 | 104 | int main() |
eawendtjr | 0:62df2a5864d5 | 105 | { |
eawendtjr | 0:62df2a5864d5 | 106 | pc.baud(115200); |
eawendtjr | 1:702f144a88b2 | 107 | RGB_LED.set_led(1, 0, 1); |
eawendtjr | 1:702f144a88b2 | 108 | wait(1); |
eawendtjr | 0:62df2a5864d5 | 109 | |
eawendtjr | 0:62df2a5864d5 | 110 | aod_sel_5on[0] = 0xCB; |
eawendtjr | 0:62df2a5864d5 | 111 | aod_sel_5off[0] = 0xC9; |
eawendtjr | 0:62df2a5864d5 | 112 | plant_sel[0] = 0xCF; |
eawendtjr | 0:62df2a5864d5 | 113 | |
eawendtjr | 1:702f144a88b2 | 114 | RGB_LED.set_led(1, 1, 1); |
eawendtjr | 0:62df2a5864d5 | 115 | i2c.write(addr, aod_sel_5off, 1); |
eawendtjr | 0:62df2a5864d5 | 116 | pc.printf("Plantower off\r\n"); |
eawendtjr | 1:702f144a88b2 | 117 | wait(1); |
eawendtjr | 0:62df2a5864d5 | 118 | |
eawendtjr | 1:702f144a88b2 | 119 | //Enable the WiFi chip |
eawendtjr | 0:62df2a5864d5 | 120 | RGB_LED.set_led(0, 1, 1); // Light LED so we know something is happening |
eawendtjr | 0:62df2a5864d5 | 121 | wifiEnable = 1; // Enable power to the WiFi while in reset, and wait a short while |
eawendtjr | 0:62df2a5864d5 | 122 | wait_ms(100); |
eawendtjr | 0:62df2a5864d5 | 123 | wifiNReset = 1; // Now de-assert the reset signal |
eawendtjr | 0:62df2a5864d5 | 124 | RGB_LED.set_led(1, 1, 0); // Color change of LED to indicate something is happening. |
eawendtjr | 1:702f144a88b2 | 125 | wait(10); |
eawendtjr | 1:702f144a88b2 | 126 | |
eawendtjr | 1:702f144a88b2 | 127 | RGB_LED.set_led(0, 1, 0); |
eawendtjr | 1:702f144a88b2 | 128 | esp.check_esp(); |
eawendtjr | 1:702f144a88b2 | 129 | esp.version_info(); |
eawendtjr | 1:702f144a88b2 | 130 | esp.software_reset(); |
eawendtjr | 1:702f144a88b2 | 131 | |
eawendtjr | 1:702f144a88b2 | 132 | esp.command_echo_mode(ESP_ECHO_ON); |
eawendtjr | 1:702f144a88b2 | 133 | esp.set_wifi_mode(ESP_DUAL_CONFIG); |
eawendtjr | 1:702f144a88b2 | 134 | esp.enable_multiple_connections(); |
eawendtjr | 0:62df2a5864d5 | 135 | |
eawendtjr | 1:702f144a88b2 | 136 | esp.create_tcp_server(80); |
eawendtjr | 1:702f144a88b2 | 137 | |
eawendtjr | 1:702f144a88b2 | 138 | //esp.set_server_timeout(5); |
eawendtjr | 1:702f144a88b2 | 139 | |
eawendtjr | 1:702f144a88b2 | 140 | esp.list_access_points(); |
eawendtjr | 1:702f144a88b2 | 141 | esp.wifi_connect(ssid, password); |
eawendtjr | 1:702f144a88b2 | 142 | esp.check_ap(); |
eawendtjr | 1:702f144a88b2 | 143 | esp.get_ip(); |
eawendtjr | 1:702f144a88b2 | 144 | |
eawendtjr | 1:702f144a88b2 | 145 | char someArray[150]; |
eawendtjr | 1:702f144a88b2 | 146 | |
eawendtjr | 1:702f144a88b2 | 147 | t.start(); |
eawendtjr | 0:62df2a5864d5 | 148 | while(1) |
eawendtjr | 0:62df2a5864d5 | 149 | { |
eawendtjr | 1:702f144a88b2 | 150 | RGB_LED.set_led(0, 0, 1); |
eawendtjr | 1:702f144a88b2 | 151 | if(t.read()>30)//if 30 seconds passed |
eawendtjr | 1:702f144a88b2 | 152 | { |
eawendtjr | 1:702f144a88b2 | 153 | t.reset();//reset timer |
eawendtjr | 1:702f144a88b2 | 154 | //now send temperature value to thingspeak |
eawendtjr | 1:702f144a88b2 | 155 | //use your thingspeak channel's Write api key |
eawendtjr | 1:702f144a88b2 | 156 | sprintf(someArray,"GET https://api.thingspeak.com/update?api_key=SU35AOKAZ30E0CAX&field1=%d\r\n\r\n",rand() % 10 + 1); |
eawendtjr | 1:702f144a88b2 | 157 | |
eawendtjr | 1:702f144a88b2 | 158 | esp.delete_tcp_server(); |
eawendtjr | 1:702f144a88b2 | 159 | esp.establish_connection(0, conn_type, server, 80); |
eawendtjr | 2:3df874f33c42 | 160 | esp.send_data_tcp(0, someArray); |
eawendtjr | 2:3df874f33c42 | 161 | esp.close_connection(0); |
eawendtjr | 1:702f144a88b2 | 162 | esp.create_tcp_server(80); |
eawendtjr | 1:702f144a88b2 | 163 | pc.printf("%s\r\n", someArray); |
eawendtjr | 1:702f144a88b2 | 164 | } |
eawendtjr | 0:62df2a5864d5 | 165 | } |
eawendtjr | 0:62df2a5864d5 | 166 | } |