Nucleo_SSD1306_DS1302_ESP8266_AM2320_BME280
Dependencies: AM2320 AutomationElements BME280 DS1302 ESP8266 mbed
main.cpp@0:5f61200516d7, 2017-05-11 (annotated)
- Committer:
- dadangjia
- Date:
- Thu May 11 16:57:18 2017 +0000
- Revision:
- 0:5f61200516d7
OK
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dadangjia | 0:5f61200516d7 | 1 | #include "mbed.h" |
dadangjia | 0:5f61200516d7 | 2 | #include <time.h> |
dadangjia | 0:5f61200516d7 | 3 | #include "CriusOLED.h" |
dadangjia | 0:5f61200516d7 | 4 | #include "HCSR04.h" |
dadangjia | 0:5f61200516d7 | 5 | #include "AutomationElements.h" |
dadangjia | 0:5f61200516d7 | 6 | #include "DS1302.h" |
dadangjia | 0:5f61200516d7 | 7 | #include "AM2320.h" |
dadangjia | 0:5f61200516d7 | 8 | |
dadangjia | 0:5f61200516d7 | 9 | //全局变量 |
dadangjia | 0:5f61200516d7 | 10 | DigitalOut led(LED1); |
dadangjia | 0:5f61200516d7 | 11 | DigitalOut RST(D6); |
dadangjia | 0:5f61200516d7 | 12 | char buffer1[20],buffer2[50],buffer3[20]; |
dadangjia | 0:5f61200516d7 | 13 | time_t rawtime; |
dadangjia | 0:5f61200516d7 | 14 | struct tm timeinfo; |
dadangjia | 0:5f61200516d7 | 15 | //Comment this line if the DS1302 is already running |
dadangjia | 0:5f61200516d7 | 16 | //#define INITIAL_RUN |
dadangjia | 0:5f61200516d7 | 17 | #define SCLK A0 |
dadangjia | 0:5f61200516d7 | 18 | #define IO A1 |
dadangjia | 0:5f61200516d7 | 19 | #define CE A3 |
dadangjia | 0:5f61200516d7 | 20 | DS1302 clk(SCLK, IO, CE); |
dadangjia | 0:5f61200516d7 | 21 | |
dadangjia | 0:5f61200516d7 | 22 | //AM2320初始化 |
dadangjia | 0:5f61200516d7 | 23 | AM2320 am2320(i2c); |
dadangjia | 0:5f61200516d7 | 24 | int h; |
dadangjia | 0:5f61200516d7 | 25 | int t; |
dadangjia | 0:5f61200516d7 | 26 | //BME280初始化 |
dadangjia | 0:5f61200516d7 | 27 | #include "BME280.h" |
dadangjia | 0:5f61200516d7 | 28 | BME280 bme280(I2C_SDA, I2C_SCL); |
dadangjia | 0:5f61200516d7 | 29 | |
dadangjia | 0:5f61200516d7 | 30 | Serial pc(SERIAL_TX, SERIAL_RX,921600); |
dadangjia | 0:5f61200516d7 | 31 | |
dadangjia | 0:5f61200516d7 | 32 | HCSR04 sensor(D2, D3); |
dadangjia | 0:5f61200516d7 | 33 | float sampleTime = 0.5; |
dadangjia | 0:5f61200516d7 | 34 | PT1 filter(1, 2, sampleTime); |
dadangjia | 0:5f61200516d7 | 35 | Ticker ticker; |
dadangjia | 0:5f61200516d7 | 36 | float Distance; |
dadangjia | 0:5f61200516d7 | 37 | float filtereddistance; |
dadangjia | 0:5f61200516d7 | 38 | |
dadangjia | 0:5f61200516d7 | 39 | void calc() { |
dadangjia | 0:5f61200516d7 | 40 | sensor.startMeasurement(); |
dadangjia | 0:5f61200516d7 | 41 | } |
dadangjia | 0:5f61200516d7 | 42 | |
dadangjia | 0:5f61200516d7 | 43 | #include "ESP8266.h" |
dadangjia | 0:5f61200516d7 | 44 | //esp8266 |
dadangjia | 0:5f61200516d7 | 45 | ESP8266 wifi(A7, A2, 921600); // baud rate for wifi |
dadangjia | 0:5f61200516d7 | 46 | char snd[300],rcv[500]; |
dadangjia | 0:5f61200516d7 | 47 | #define IP "184.106.153.149" // thingspeak.com IP Address |
dadangjia | 0:5f61200516d7 | 48 | #define IP1 "link.tlink.io" // tlink.io IP Address |
dadangjia | 0:5f61200516d7 | 49 | #define IP2 "tcp.lewei50.com" //tcp.lewei50.com IP Address |
dadangjia | 0:5f61200516d7 | 50 | #define IP3 "api.heclouds.com" //http onenet IP Address |
dadangjia | 0:5f61200516d7 | 51 | uint8_t esp8266_time; |
dadangjia | 0:5f61200516d7 | 52 | AnalogIn inputPin(A6); // temp |
dadangjia | 0:5f61200516d7 | 53 | |
dadangjia | 0:5f61200516d7 | 54 | void esp82666() |
dadangjia | 0:5f61200516d7 | 55 | { |
dadangjia | 0:5f61200516d7 | 56 | switch(esp8266_time) |
dadangjia | 0:5f61200516d7 | 57 | { |
dadangjia | 0:5f61200516d7 | 58 | case 0:RST=0;wait(0.001);RST=1;break; |
dadangjia | 0:5f61200516d7 | 59 | case 7: strcpy(snd,"AT+CIPMODE=0");wifi.SendCMD(snd);break;//Setting WiFi into MultiChannel mode |
dadangjia | 0:5f61200516d7 | 60 | case 8: strcpy(snd,"AT+CIPMUX=1");wifi.SendCMD(snd);break;//Setting WiFi into MultiChannel mode |
dadangjia | 0:5f61200516d7 | 61 | } |
dadangjia | 0:5f61200516d7 | 62 | switch(esp8266_time%40) |
dadangjia | 0:5f61200516d7 | 63 | { |
dadangjia | 0:5f61200516d7 | 64 | case 9: sprintf(snd,"AT+CIPSTART=1,\"TCP\",\"%s\",80",IP3);wifi.SendCMD(snd);break;//Initiate connection with onenet server |
dadangjia | 0:5f61200516d7 | 65 | case 10: strcpy(snd,"AT+CIPSEND=1,200");wifi.SendCMD(snd);wait(0.001); |
dadangjia | 0:5f61200516d7 | 66 | sprintf(snd,"POST /devices/4605176/datapoints?type=3 HTTP/1.1\r\n" |
dadangjia | 0:5f61200516d7 | 67 | "api-key: bryNFvy6sbj9Isu5mHXp3fwIvtc=\r\n" |
dadangjia | 0:5f61200516d7 | 68 | "Host:api.heclouds.com\r\n" |
dadangjia | 0:5f61200516d7 | 69 | "Connection:close\r\n" |
dadangjia | 0:5f61200516d7 | 70 | "Content-Length:49\r\n" |
dadangjia | 0:5f61200516d7 | 71 | "\r\n" |
dadangjia | 0:5f61200516d7 | 72 | "{\"juli\":%03.2f,\"time\":%010d,\"mq135\":%02.2f}\r\n", |
dadangjia | 0:5f61200516d7 | 73 | Distance,rawtime,inputPin.read()*100);wifi.SendCMD(snd);break; |
dadangjia | 0:5f61200516d7 | 74 | case 11: sprintf(snd,"AT+CIPSTART=2,\"TCP\",\"%s\",9960",IP2);wifi.SendCMD(snd);break;//Initiate connection with tcp.lewei50.com server |
dadangjia | 0:5f61200516d7 | 75 | case 12: strcpy(snd,"AT+CIPSEND=2,87");wifi.SendCMD(snd);wait(0.001);//Send Number of open connections,Characters to send |
dadangjia | 0:5f61200516d7 | 76 | strcpy(snd,"{\"method\": \"update\",\"gatewayNo\": \"01\",\"userkey\": \"e84c3784af864fb0bb70fd33cb434a45\"}&^!");wifi.SendCMD(snd);break;//Post values to cp.lewei50.com |
dadangjia | 0:5f61200516d7 | 77 | case 13: strcpy(snd,"AT+CIPSEND=2,104");wifi.SendCMD(snd);wait(0.001);//Send Number of open connections,Characters to send |
dadangjia | 0:5f61200516d7 | 78 | sprintf(snd,"{\"method\": \"upload\",\"data\":[{\"Name\":\"shidu\",\"Value\":\"%2.4f\"},{\"Name\":\"wendu\",\"Value\":\"%010d\"}]}&^!",inputPin.read(),rawtime);wifi.SendCMD(snd);break;//Post values to tcp.lewei50.com |
dadangjia | 0:5f61200516d7 | 79 | case 14: sprintf(snd,"AT+CIPSTART=4,\"TCP\",\"%s\",80",IP);wifi.SendCMD(snd);break;//Initiate connection with THINGSPEAK server |
dadangjia | 0:5f61200516d7 | 80 | case 15: strcpy(snd,"AT+CIPSEND=4,46");wifi.SendCMD(snd);wait(0.001);//Send Number of open connections,Characters to send |
dadangjia | 0:5f61200516d7 | 81 | sprintf(snd,"GET /update?key=YPEAG0PP1LZ9ZUY5&field2=%2.2f\r\n",inputPin.read());wifi.SendCMD(snd);break;//Post values to thingspeak |
dadangjia | 0:5f61200516d7 | 82 | case 16: sprintf(snd,"AT+CIPSTART=3,\"TCP\",\"%s\",8647",IP1);wifi.SendCMD(snd);break;//Initiate connection with THINGSPEAK server |
dadangjia | 0:5f61200516d7 | 83 | case 17: strcpy(snd,"AT+CIPSEND=3,16");wifi.SendCMD(snd);wait(0.001);//Send Number of open connections,Characters to send |
dadangjia | 0:5f61200516d7 | 84 | strcpy(snd,"3L0P2M2S3P9061I6");wifi.SendCMD(snd);clear_display();break;//Send Number of open connections,Characters to send |
dadangjia | 0:5f61200516d7 | 85 | } |
dadangjia | 0:5f61200516d7 | 86 | if(esp8266_time%40>=18) |
dadangjia | 0:5f61200516d7 | 87 | { |
dadangjia | 0:5f61200516d7 | 88 | strcpy(snd,"AT+CIPSEND=3,30");wifi.SendCMD(snd);wait(0.001); |
dadangjia | 0:5f61200516d7 | 89 | sprintf(snd,"DTU%2.4f,%010d,%04.4f",inputPin.read(),rawtime,Distance);wifi.SendCMD(snd); |
dadangjia | 0:5f61200516d7 | 90 | } |
dadangjia | 0:5f61200516d7 | 91 | ++esp8266_time; |
dadangjia | 0:5f61200516d7 | 92 | } |
dadangjia | 0:5f61200516d7 | 93 | |
dadangjia | 0:5f61200516d7 | 94 | int main() |
dadangjia | 0:5f61200516d7 | 95 | { |
dadangjia | 0:5f61200516d7 | 96 | //IIC初始化 |
dadangjia | 0:5f61200516d7 | 97 | i2c.frequency(400000); |
dadangjia | 0:5f61200516d7 | 98 | |
dadangjia | 0:5f61200516d7 | 99 | //初始化OLED12864 |
dadangjia | 0:5f61200516d7 | 100 | init_OLED(); |
dadangjia | 0:5f61200516d7 | 101 | displayOn(); |
dadangjia | 0:5f61200516d7 | 102 | reset_display(); |
dadangjia | 0:5f61200516d7 | 103 | |
dadangjia | 0:5f61200516d7 | 104 | // Initialize HCSR04 |
dadangjia | 0:5f61200516d7 | 105 | sensor.setRanges(2, 500); |
dadangjia | 0:5f61200516d7 | 106 | ticker.attach(&calc, sampleTime); |
dadangjia | 0:5f61200516d7 | 107 | |
dadangjia | 0:5f61200516d7 | 108 | //如果程序需要,可以手动设定ds1302的时间 |
dadangjia | 0:5f61200516d7 | 109 | #ifdef INITIAL_RUN |
dadangjia | 0:5f61200516d7 | 110 | timeinfo.tm_year = 2017-1900; |
dadangjia | 0:5f61200516d7 | 111 | timeinfo.tm_mon = 1-1; |
dadangjia | 0:5f61200516d7 | 112 | timeinfo.tm_mday = 7; |
dadangjia | 0:5f61200516d7 | 113 | timeinfo.tm_hour=15; |
dadangjia | 0:5f61200516d7 | 114 | timeinfo.tm_min=45; |
dadangjia | 0:5f61200516d7 | 115 | timeinfo.tm_sec=0; |
dadangjia | 0:5f61200516d7 | 116 | timeinfo.tm_wday=6-1; |
dadangjia | 0:5f61200516d7 | 117 | clk.set_time(mktime(&timeinfo)); |
dadangjia | 0:5f61200516d7 | 118 | #endif |
dadangjia | 0:5f61200516d7 | 119 | //时间设定,将ds1302时间写入MCU中,程序时间读取通过MCU嘀嗒时钟 |
dadangjia | 0:5f61200516d7 | 120 | rawtime = clk.time(NULL); |
dadangjia | 0:5f61200516d7 | 121 | set_time(rawtime); |
dadangjia | 0:5f61200516d7 | 122 | |
dadangjia | 0:5f61200516d7 | 123 | pc.printf("STM32L432 Initializing OK\r\n"); |
dadangjia | 0:5f61200516d7 | 124 | RST=1; |
dadangjia | 0:5f61200516d7 | 125 | while(1) { |
dadangjia | 0:5f61200516d7 | 126 | //测量距离 |
dadangjia | 0:5f61200516d7 | 127 | while(!sensor.isNewDataReady()) { |
dadangjia | 0:5f61200516d7 | 128 | } |
dadangjia | 0:5f61200516d7 | 129 | //led闪亮表示程序运行 |
dadangjia | 0:5f61200516d7 | 130 | led=!led; |
dadangjia | 0:5f61200516d7 | 131 | |
dadangjia | 0:5f61200516d7 | 132 | //测量并显示距离 |
dadangjia | 0:5f61200516d7 | 133 | Distance = sensor.getDistance_cm(); |
dadangjia | 0:5f61200516d7 | 134 | filter.in(Distance); |
dadangjia | 0:5f61200516d7 | 135 | filtereddistance = filter.out(); |
dadangjia | 0:5f61200516d7 | 136 | snprintf(buffer1, 20, "%3.1fcm %3.1fcm ",Distance, filtereddistance); |
dadangjia | 0:5f61200516d7 | 137 | sendStrXY(buffer1,2,0); // pc.printf(buffer1); |
dadangjia | 0:5f61200516d7 | 138 | |
dadangjia | 0:5f61200516d7 | 139 | //显示MCU读取时间 |
dadangjia | 0:5f61200516d7 | 140 | rawtime = time(NULL); |
dadangjia | 0:5f61200516d7 | 141 | snprintf(buffer2, 50, "%s %10d %4.2f%%",ctime(&rawtime),rawtime,inputPin.read()*100); |
dadangjia | 0:5f61200516d7 | 142 | sendStrXY(buffer2,3,0); |
dadangjia | 0:5f61200516d7 | 143 | |
dadangjia | 0:5f61200516d7 | 144 | //AM2320读取数据 |
dadangjia | 0:5f61200516d7 | 145 | h = am2320.humidity(); |
dadangjia | 0:5f61200516d7 | 146 | t = am2320.temperature(); |
dadangjia | 0:5f61200516d7 | 147 | snprintf(buffer3, 20, "%3d.%dc %3d.%d%%",t/10,t%10,h/10,h%10); |
dadangjia | 0:5f61200516d7 | 148 | sendStrXY(buffer3,6,0); |
dadangjia | 0:5f61200516d7 | 149 | |
dadangjia | 0:5f61200516d7 | 150 | //bme280读取数据 |
dadangjia | 0:5f61200516d7 | 151 | snprintf(buffer1,sizeof(buffer1), "%2.2fC %6.0fPa",bme280.getTemperature(), bme280.getPressure()*100); |
dadangjia | 0:5f61200516d7 | 152 | sendStrXY(buffer1,7,0); |
dadangjia | 0:5f61200516d7 | 153 | |
dadangjia | 0:5f61200516d7 | 154 | //ESP8266执行操作 |
dadangjia | 0:5f61200516d7 | 155 | esp82666(); |
dadangjia | 0:5f61200516d7 | 156 | } |
dadangjia | 0:5f61200516d7 | 157 | } |