Nucleo_SSD1306_DS1302_ESP8266_AM2320_BME280

Dependencies:   AM2320 AutomationElements BME280 DS1302 ESP8266 mbed

Committer:
dadangjia
Date:
Thu May 11 16:57:18 2017 +0000
Revision:
0:5f61200516d7
OK

Who changed what in which revision?

UserRevisionLine numberNew 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 }