* AM2321的取温度间隔得大于2s,否则,i2c会不工作了 * SimpleTimer有个bug,会导致两次快速的读温度,现在读温度函数里加了保护 * Blynk有个bug,会导致无法把数据传到服务器 * 现在可以正常工作了

Dependencies:   mbed

Committer:
lixianyu
Date:
Fri Jun 24 02:06:43 2016 +0000
Revision:
1:e34100dd6532
Parent:
0:740c1eb2df13
?Arduino??????????0~255??????LPC824????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lixianyu 0:740c1eb2df13 1 /*
lixianyu 0:740c1eb2df13 2 * Io_moon(木卫一) is a project name.
lixianyu 0:740c1eb2df13 3 * Io_moon port ESP8266BlynkWeatherStation from Microduino Core+ to LPC824.
lixianyu 0:740c1eb2df13 4 *
lixianyu 0:740c1eb2df13 5 * ref:
lixianyu 0:740c1eb2df13 6 * http://wiki.microduino.cn/index.php/开源WiFi气象站系统/zh
lixianyu 0:740c1eb2df13 7 * https://github.com/Microduino/ESP8266BlynkWeatherStation
lixianyu 0:740c1eb2df13 8 */
lixianyu 0:740c1eb2df13 9 #include "mbed.h"
lixianyu 0:740c1eb2df13 10
lixianyu 0:740c1eb2df13 11 #include "Config.h"
lixianyu 0:740c1eb2df13 12 #include "MicroduinoPinNames.h"
lixianyu 0:740c1eb2df13 13 DigitalOut myled(P0_20);
lixianyu 0:740c1eb2df13 14 I2C g_i2c(P0_11, P0_10);//SDA, SCL
lixianyu 0:740c1eb2df13 15 Timer g_MainTimer;
lixianyu 0:740c1eb2df13 16 Ticker g_Ticker;
lixianyu 0:740c1eb2df13 17 #include "SimpleTimer.h"
lixianyu 0:740c1eb2df13 18 #include "userDef.h"
lixianyu 0:740c1eb2df13 19 #include "sensor.h"
lixianyu 0:740c1eb2df13 20 #ifdef OPEN_OLED
lixianyu 0:740c1eb2df13 21 #include "oled.h"
lixianyu 0:740c1eb2df13 22 #endif
lixianyu 0:740c1eb2df13 23 #ifdef OPEN_BLYNK
lixianyu 0:740c1eb2df13 24 #include "WiFiBlynk.h"
lixianyu 0:740c1eb2df13 25 #endif
lixianyu 0:740c1eb2df13 26 Serial pc(P0_4, P0_0); // tx, rx
lixianyu 0:740c1eb2df13 27
lixianyu 0:740c1eb2df13 28 void led_flash()
lixianyu 0:740c1eb2df13 29 {
lixianyu 0:740c1eb2df13 30 #if 0
lixianyu 0:740c1eb2df13 31 static int cot = 0;
lixianyu 0:740c1eb2df13 32 cot++;
lixianyu 0:740c1eb2df13 33 if (cot > 4) {
lixianyu 0:740c1eb2df13 34 g_Timer.reset();
lixianyu 0:740c1eb2df13 35 cot = 0;
lixianyu 0:740c1eb2df13 36 }
lixianyu 0:740c1eb2df13 37 #endif
lixianyu 0:740c1eb2df13 38 myled = 1;
lixianyu 0:740c1eb2df13 39 wait_ms(70);
lixianyu 0:740c1eb2df13 40 myled = 0;
lixianyu 0:740c1eb2df13 41 }
lixianyu 0:740c1eb2df13 42
lixianyu 0:740c1eb2df13 43 static void led_flash_fast()
lixianyu 0:740c1eb2df13 44 {
lixianyu 0:740c1eb2df13 45 myled = !myled;
lixianyu 0:740c1eb2df13 46 }
lixianyu 0:740c1eb2df13 47
lixianyu 0:740c1eb2df13 48 #ifdef OPEN_OLED
lixianyu 0:740c1eb2df13 49 Adafruit_SSD1306_I2c adaf(g_i2c, P0_13, 0x78, 64, 128);
lixianyu 0:740c1eb2df13 50 void update_oled()
lixianyu 0:740c1eb2df13 51 {
lixianyu 0:740c1eb2df13 52 static uint32_t start;
lixianyu 0:740c1eb2df13 53 start = g_MainTimer.read_ms();
lixianyu 1:e34100dd6532 54 //pc.printf("update_oled: %u ms\r\n", start);
lixianyu 0:740c1eb2df13 55 myled = 1;
lixianyu 0:740c1eb2df13 56 wait_ms(60);
lixianyu 0:740c1eb2df13 57 myled = 0;
lixianyu 0:740c1eb2df13 58 oled(adaf, sensor_tem, sensor_hum, sensor_light, sensorPM25, Sensor_etoh);
lixianyu 0:740c1eb2df13 59 }
lixianyu 0:740c1eb2df13 60 #endif
lixianyu 0:740c1eb2df13 61
lixianyu 0:740c1eb2df13 62 int main()
lixianyu 0:740c1eb2df13 63 {
lixianyu 0:740c1eb2df13 64 g_Ticker.attach_us(led_flash_fast, 40000);
lixianyu 0:740c1eb2df13 65 pc.baud(115200);
lixianyu 0:740c1eb2df13 66 pc.printf("Enter main()\r\n");
lixianyu 0:740c1eb2df13 67 g_MainTimer.start();
lixianyu 0:740c1eb2df13 68 SimpleTimer gSimpleTimer;
lixianyu 0:740c1eb2df13 69
lixianyu 0:740c1eb2df13 70 // Setup a function to be called every second
lixianyu 0:740c1eb2df13 71 #ifdef OPEN_BLYNK
lixianyu 0:740c1eb2df13 72 gSimpleTimer.setInterval(2000, senTempHumi);
lixianyu 0:740c1eb2df13 73 gSimpleTimer.setInterval(3000, sendLight);
lixianyu 0:740c1eb2df13 74 gSimpleTimer.setInterval(4000, sendCH4);
lixianyu 0:740c1eb2df13 75 gSimpleTimer.setInterval(5000, sendPM25);
lixianyu 0:740c1eb2df13 76 #endif
lixianyu 0:740c1eb2df13 77 gSimpleTimer.setInterval(1001, updateLight);
lixianyu 0:740c1eb2df13 78 gSimpleTimer.setInterval(4002, updateCH4);
lixianyu 0:740c1eb2df13 79 gSimpleTimer.setInterval(4001, updateTempHumi);
lixianyu 0:740c1eb2df13 80 #ifdef OPEN_PM25
lixianyu 0:740c1eb2df13 81 gSimpleTimer.setInterval(3000, PM25);
lixianyu 0:740c1eb2df13 82 #endif
lixianyu 0:740c1eb2df13 83 gSimpleTimer.setInterval(4000, led_flash);
lixianyu 0:740c1eb2df13 84 #ifdef OPEN_OLED
lixianyu 0:740c1eb2df13 85 gSimpleTimer.setInterval(2000, update_oled);
lixianyu 0:740c1eb2df13 86 #endif
lixianyu 0:740c1eb2df13 87 #ifdef OPEN_PM25
lixianyu 0:740c1eb2df13 88 PM25_init();
lixianyu 0:740c1eb2df13 89 #endif
lixianyu 0:740c1eb2df13 90 wait_ms(2000);
lixianyu 0:740c1eb2df13 91 #ifdef OPEN_OLED
lixianyu 0:740c1eb2df13 92 oled_init(adaf);
lixianyu 0:740c1eb2df13 93 #endif
lixianyu 0:740c1eb2df13 94 #ifdef OPEN_BLYNK
lixianyu 0:740c1eb2df13 95 /*
lixianyu 0:740c1eb2df13 96 * Set ESP8266 baud rate
lixianyu 0:740c1eb2df13 97 * 在LPC824上,波特率设为115200时,ESP8266无法工作
lixianyu 0:740c1eb2df13 98 */
lixianyu 0:740c1eb2df13 99 #define TARGET_BAUD 9600
lixianyu 0:740c1eb2df13 100 EspSerial.baud(115200);
lixianyu 0:740c1eb2df13 101 wifi.setUart(TARGET_BAUD, 2);
lixianyu 0:740c1eb2df13 102 EspSerial.baud(TARGET_BAUD);
lixianyu 0:740c1eb2df13 103 wait(2.0);
lixianyu 0:740c1eb2df13 104
lixianyu 0:740c1eb2df13 105 Blynk.begin(auth, wifi, SSID, PASS);
lixianyu 1:e34100dd6532 106 wait(3.0);
lixianyu 0:740c1eb2df13 107 #endif
lixianyu 0:740c1eb2df13 108 g_Ticker.detach();
lixianyu 0:740c1eb2df13 109
lixianyu 0:740c1eb2df13 110 while(1) {
lixianyu 0:740c1eb2df13 111 //pc.printf("Enter while(1)\r\n");
lixianyu 0:740c1eb2df13 112 //myled = !myled;
lixianyu 0:740c1eb2df13 113 gSimpleTimer.run();
lixianyu 0:740c1eb2df13 114 #ifdef OPEN_BLYNK
lixianyu 0:740c1eb2df13 115 Blynk.run(); // All the Blynk Magic happens here...
lixianyu 0:740c1eb2df13 116 #endif
lixianyu 0:740c1eb2df13 117
lixianyu 0:740c1eb2df13 118 }
lixianyu 0:740c1eb2df13 119 }