Nucleo_SSD1306_DS1302_ESP8266_AM2320_BME280

Dependencies:   AM2320 AutomationElements BME280 DS1302 ESP8266 mbed

Revision:
0:5f61200516d7
diff -r 000000000000 -r 5f61200516d7 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu May 11 16:57:18 2017 +0000
@@ -0,0 +1,157 @@
+#include "mbed.h"
+#include <time.h>
+#include "CriusOLED.h"
+#include "HCSR04.h"
+#include "AutomationElements.h"
+#include "DS1302.h"
+#include  "AM2320.h"
+
+//全局变量
+DigitalOut led(LED1);
+DigitalOut RST(D6);
+char buffer1[20],buffer2[50],buffer3[20];
+time_t rawtime;
+struct tm timeinfo;
+//Comment this line if the DS1302 is already running
+//#define INITIAL_RUN
+#define SCLK     A0
+#define IO      A1
+#define CE      A3
+DS1302 clk(SCLK, IO, CE);
+
+//AM2320初始化
+AM2320 am2320(i2c);
+int h;
+int t;
+//BME280初始化
+#include "BME280.h"
+BME280 bme280(I2C_SDA, I2C_SCL);
+
+Serial pc(SERIAL_TX, SERIAL_RX,921600);
+
+HCSR04 sensor(D2, D3);
+float sampleTime = 0.5;
+PT1 filter(1, 2, sampleTime);
+Ticker ticker;
+float Distance;
+float filtereddistance; 
+
+void calc() {
+    sensor.startMeasurement();
+}
+
+#include "ESP8266.h"
+//esp8266
+ESP8266 wifi(A7, A2, 921600); // baud rate for wifi
+char snd[300],rcv[500];
+#define IP "184.106.153.149" // thingspeak.com IP Address
+#define IP1 "link.tlink.io" // tlink.io IP Address
+#define IP2 "tcp.lewei50.com" //tcp.lewei50.com IP Address
+#define IP3 "api.heclouds.com"   //http onenet IP Address
+uint8_t esp8266_time;
+AnalogIn inputPin(A6); // temp
+
+void esp82666()
+{
+   switch(esp8266_time)
+   {
+    case 0:RST=0;wait(0.001);RST=1;break;
+    case 7:  strcpy(snd,"AT+CIPMODE=0");wifi.SendCMD(snd);break;//Setting WiFi into MultiChannel mode
+    case 8:  strcpy(snd,"AT+CIPMUX=1");wifi.SendCMD(snd);break;//Setting WiFi into MultiChannel mode
+    }
+   switch(esp8266_time%40)
+   {
+    case 9:  sprintf(snd,"AT+CIPSTART=1,\"TCP\",\"%s\",80",IP3);wifi.SendCMD(snd);break;//Initiate connection with onenet server 
+    case 10: strcpy(snd,"AT+CIPSEND=1,200");wifi.SendCMD(snd);wait(0.001);
+             sprintf(snd,"POST /devices/4605176/datapoints?type=3 HTTP/1.1\r\n"
+                         "api-key: bryNFvy6sbj9Isu5mHXp3fwIvtc=\r\n"
+                         "Host:api.heclouds.com\r\n"
+                         "Connection:close\r\n"
+                         "Content-Length:49\r\n"
+                         "\r\n"
+                         "{\"juli\":%03.2f,\"time\":%010d,\"mq135\":%02.2f}\r\n",
+                         Distance,rawtime,inputPin.read()*100);wifi.SendCMD(snd);break;
+    case 11: sprintf(snd,"AT+CIPSTART=2,\"TCP\",\"%s\",9960",IP2);wifi.SendCMD(snd);break;//Initiate connection with tcp.lewei50.com server   
+    case 12: strcpy(snd,"AT+CIPSEND=2,87");wifi.SendCMD(snd);wait(0.001);//Send Number of open connections,Characters to send 
+             strcpy(snd,"{\"method\": \"update\",\"gatewayNo\": \"01\",\"userkey\": \"e84c3784af864fb0bb70fd33cb434a45\"}&^!");wifi.SendCMD(snd);break;//Post values to cp.lewei50.com
+    case 13: strcpy(snd,"AT+CIPSEND=2,104");wifi.SendCMD(snd);wait(0.001);//Send Number of open connections,Characters to send 
+             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 
+    case 14: sprintf(snd,"AT+CIPSTART=4,\"TCP\",\"%s\",80",IP);wifi.SendCMD(snd);break;//Initiate connection with THINGSPEAK server 
+    case 15: strcpy(snd,"AT+CIPSEND=4,46");wifi.SendCMD(snd);wait(0.001);//Send Number of open connections,Characters to send 
+             sprintf(snd,"GET /update?key=YPEAG0PP1LZ9ZUY5&field2=%2.2f\r\n",inputPin.read());wifi.SendCMD(snd);break;//Post values to thingspeak
+    case 16: sprintf(snd,"AT+CIPSTART=3,\"TCP\",\"%s\",8647",IP1);wifi.SendCMD(snd);break;//Initiate connection with THINGSPEAK server 
+    case 17: strcpy(snd,"AT+CIPSEND=3,16");wifi.SendCMD(snd);wait(0.001);//Send Number of open connections,Characters to send 
+             strcpy(snd,"3L0P2M2S3P9061I6");wifi.SendCMD(snd);clear_display();break;//Send Number of open connections,Characters to send 
+   } 
+    if(esp8266_time%40>=18)
+    {
+     strcpy(snd,"AT+CIPSEND=3,30");wifi.SendCMD(snd);wait(0.001);
+     sprintf(snd,"DTU%2.4f,%010d,%04.4f",inputPin.read(),rawtime,Distance);wifi.SendCMD(snd);   
+    }
+   ++esp8266_time;
+}
+
+int main()
+{
+    //IIC初始化
+    i2c.frequency(400000);
+    
+    //初始化OLED12864
+    init_OLED();
+    displayOn();
+    reset_display();
+    
+    // Initialize HCSR04
+    sensor.setRanges(2, 500);
+    ticker.attach(&calc, sampleTime);
+    
+    //如果程序需要,可以手动设定ds1302的时间 
+    #ifdef INITIAL_RUN
+    timeinfo.tm_year = 2017-1900;
+    timeinfo.tm_mon = 1-1;
+    timeinfo.tm_mday = 7;
+    timeinfo.tm_hour=15;
+    timeinfo.tm_min=45;
+    timeinfo.tm_sec=0;
+    timeinfo.tm_wday=6-1;
+    clk.set_time(mktime(&timeinfo));
+    #endif
+    //时间设定,将ds1302时间写入MCU中,程序时间读取通过MCU嘀嗒时钟   
+    rawtime = clk.time(NULL);
+    set_time(rawtime);  
+    
+    pc.printf("STM32L432 Initializing OK\r\n");
+    RST=1;
+    while(1) {
+        //测量距离
+        while(!sensor.isNewDataReady()) {
+        }
+        //led闪亮表示程序运行
+        led=!led;
+        
+        //测量并显示距离
+        Distance = sensor.getDistance_cm();
+        filter.in(Distance);
+        filtereddistance = filter.out();
+        snprintf(buffer1, 20, "%3.1fcm %3.1fcm   ",Distance, filtereddistance);    
+        sendStrXY(buffer1,2,0);         // pc.printf(buffer1);          
+        
+        //显示MCU读取时间
+        rawtime = time(NULL);
+        snprintf(buffer2, 50, "%s %10d %4.2f%%",ctime(&rawtime),rawtime,inputPin.read()*100); 
+        sendStrXY(buffer2,3,0);
+        
+        //AM2320读取数据
+        h = am2320.humidity();
+        t = am2320.temperature();
+        snprintf(buffer3, 20, "%3d.%dc %3d.%d%%",t/10,t%10,h/10,h%10); 
+        sendStrXY(buffer3,6,0);
+        
+        //bme280读取数据
+        snprintf(buffer1,sizeof(buffer1), "%2.2fC %6.0fPa",bme280.getTemperature(), bme280.getPressure()*100); 
+        sendStrXY(buffer1,7,0); 
+        
+        //ESP8266执行操作
+        esp82666();        
+    }
+}