seeedstudio ARCH GPRS Demo. post data to yeelink.

Dependencies:   mbed

Committer:
loovee
Date:
Fri Aug 23 02:31:06 2013 +0000
Revision:
0:6d297fe482af
seeedstudio Arch Gprs Demo. ; ; post data to yeelink.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loovee 0:6d297fe482af 1 /*
loovee 0:6d297fe482af 2 main.cpp, iot_mbed demo
loovee 0:6d297fe482af 3 2013 Copyright (c) Seeed Technology Inc. All right reserved.
loovee 0:6d297fe482af 4
loovee 0:6d297fe482af 5 Author:Loovee
loovee 0:6d297fe482af 6 2013-7-21
loovee 0:6d297fe482af 7
loovee 0:6d297fe482af 8 This library is free software; you can redistribute it and/or
loovee 0:6d297fe482af 9 modify it under the terms of the GNU Lesser General Public
loovee 0:6d297fe482af 10 License as published by the Free Software Foundation; either
loovee 0:6d297fe482af 11 version 2.1 of the License, or (at your option) any later version.
loovee 0:6d297fe482af 12
loovee 0:6d297fe482af 13 This library is distributed in the hope that it will be useful,
loovee 0:6d297fe482af 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
loovee 0:6d297fe482af 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
loovee 0:6d297fe482af 16 Lesser General Public License for more details.
loovee 0:6d297fe482af 17
loovee 0:6d297fe482af 18 You should have received a copy of the GNU Lesser General Public
loovee 0:6d297fe482af 19 License along with this library; if not, write to the Free Software
loovee 0:6d297fe482af 20 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
loovee 0:6d297fe482af 21 */
loovee 0:6d297fe482af 22
loovee 0:6d297fe482af 23 #include "tcp_yeelink.h"
loovee 0:6d297fe482af 24 #include "mbed.h"
loovee 0:6d297fe482af 25 #include "tcp_yeelink_dfs.h"
loovee 0:6d297fe482af 26 #include "ARCH_GPRS_HW.h"
loovee 0:6d297fe482af 27 #include "i2c_uart.h"
loovee 0:6d297fe482af 28 #include "ARCH_GPRS_Sleep.h"
loovee 0:6d297fe482af 29
loovee 0:6d297fe482af 30 AnalogIn light_sensor(GROVE_ADC_1);
loovee 0:6d297fe482af 31
loovee 0:6d297fe482af 32 #define BROADCAST_TIME 100 // broadcast time : 100s
loovee 0:6d297fe482af 33
loovee 0:6d297fe482af 34 // you can get this information in www.yeelink.net
loovee 0:6d297fe482af 35 #define HTTP_POST_URL "http://api.yeelink.net/v1.0/device/4190/sensor/6074/datapoints"
loovee 0:6d297fe482af 36
loovee 0:6d297fe482af 37 //#define HTTP_POST_URL_BAT "http://api.yeelink.net/v1.0/device/4190/sensor/6089/datapoints"
loovee 0:6d297fe482af 38
loovee 0:6d297fe482af 39 #define YEELINK_APIKEY "38645582d54121679dee8104f140c29a"
loovee 0:6d297fe482af 40
loovee 0:6d297fe482af 41 void delay_ms(long ms)
loovee 0:6d297fe482af 42 {
loovee 0:6d297fe482af 43 if(ms <= 900)
loovee 0:6d297fe482af 44 {
loovee 0:6d297fe482af 45 wait_ms(ms);
loovee 0:6d297fe482af 46 wdt_sleep.feed();
loovee 0:6d297fe482af 47 }
loovee 0:6d297fe482af 48 else
loovee 0:6d297fe482af 49 {
loovee 0:6d297fe482af 50 ms -= 900;
loovee 0:6d297fe482af 51 delay_ms(900);
loovee 0:6d297fe482af 52 }
loovee 0:6d297fe482af 53 }
loovee 0:6d297fe482af 54
loovee 0:6d297fe482af 55 int getAnalog()
loovee 0:6d297fe482af 56 {
loovee 0:6d297fe482af 57 long sum = 0;
loovee 0:6d297fe482af 58 for(int i=0; i<32; i++)
loovee 0:6d297fe482af 59 {
loovee 0:6d297fe482af 60 sum += light_sensor.read_u16();
loovee 0:6d297fe482af 61 }
loovee 0:6d297fe482af 62 sum = sum >> 5;
loovee 0:6d297fe482af 63 sum = sum >> 6;
loovee 0:6d297fe482af 64 return sum;
loovee 0:6d297fe482af 65 }
loovee 0:6d297fe482af 66
loovee 0:6d297fe482af 67 void power_on()
loovee 0:6d297fe482af 68 {
loovee 0:6d297fe482af 69 IOT.init(HTTP_POST_URL, YEELINK_APIKEY);
loovee 0:6d297fe482af 70 START:
loovee 0:6d297fe482af 71 DBG("begin to start\r\n");
loovee 0:6d297fe482af 72 iot_hw.EG10_PWROFF(); // eg10 power off
loovee 0:6d297fe482af 73 wait(0.5);
loovee 0:6d297fe482af 74 wdt_sleep.feed();
loovee 0:6d297fe482af 75 iot_hw.EG10_PWRON(); // eg10 power on
loovee 0:6d297fe482af 76 wait(0.5);
loovee 0:6d297fe482af 77 wdt_sleep.feed();
loovee 0:6d297fe482af 78
loovee 0:6d297fe482af 79 if(iot_hw.init()==1)
loovee 0:6d297fe482af 80 {
loovee 0:6d297fe482af 81 iot_hw.EG10StateLed(1);
loovee 0:6d297fe482af 82 DBG("hardware init ok\r\n");
loovee 0:6d297fe482af 83 }
loovee 0:6d297fe482af 84 else
loovee 0:6d297fe482af 85 {
loovee 0:6d297fe482af 86 DBG("hardware init fail\r\n");
loovee 0:6d297fe482af 87 DBG("hardware init again\r\n");
loovee 0:6d297fe482af 88 goto START;
loovee 0:6d297fe482af 89 }
loovee 0:6d297fe482af 90 wdt_sleep.feed();
loovee 0:6d297fe482af 91 }
loovee 0:6d297fe482af 92
loovee 0:6d297fe482af 93 #define LOWPWR 1
loovee 0:6d297fe482af 94
loovee 0:6d297fe482af 95 void iot_demo()
loovee 0:6d297fe482af 96 {
loovee 0:6d297fe482af 97 wdt_sleep.wdtClkSetup(WDTCLK_SRC_IRC_OSC);
loovee 0:6d297fe482af 98
loovee 0:6d297fe482af 99 PWRON:
loovee 0:6d297fe482af 100 power_on();
loovee 0:6d297fe482af 101 for(int i=0; i<10; i++)
loovee 0:6d297fe482af 102 {
loovee 0:6d297fe482af 103 wdt_sleep.feed();
loovee 0:6d297fe482af 104 wait(0.9);
loovee 0:6d297fe482af 105 wdt_sleep.feed();
loovee 0:6d297fe482af 106 }
loovee 0:6d297fe482af 107 int dtaSw = 0;
loovee 0:6d297fe482af 108 while(1)
loovee 0:6d297fe482af 109 {
loovee 0:6d297fe482af 110
loovee 0:6d297fe482af 111 int dtaVal = getAnalog()/10;
loovee 0:6d297fe482af 112
loovee 0:6d297fe482af 113 if(!IOT.postDtaToYeelink(HTTP_POST_URL, YEELINK_APIKEY, dtaVal))
loovee 0:6d297fe482af 114 {
loovee 0:6d297fe482af 115 DBG("post data err\r\n");
loovee 0:6d297fe482af 116 wdt_sleep.feed();
loovee 0:6d297fe482af 117 goto PWRON;
loovee 0:6d297fe482af 118 }
loovee 0:6d297fe482af 119 else
loovee 0:6d297fe482af 120 {
loovee 0:6d297fe482af 121 DBG("post data ok!\r\n");
loovee 0:6d297fe482af 122 }
loovee 0:6d297fe482af 123
loovee 0:6d297fe482af 124 iot_hw.userLed(1, 1);
loovee 0:6d297fe482af 125 wait(.2);
loovee 0:6d297fe482af 126 iot_hw.userLed(1, 0);
loovee 0:6d297fe482af 127
loovee 0:6d297fe482af 128 for(int i=0; i<10; i++)
loovee 0:6d297fe482af 129 {
loovee 0:6d297fe482af 130 wdt_sleep.feed();
loovee 0:6d297fe482af 131 wait(0.5);
loovee 0:6d297fe482af 132 }
loovee 0:6d297fe482af 133 #if LOWPWR
loovee 0:6d297fe482af 134 DBG("goto sleep for 100s");
loovee 0:6d297fe482af 135 iot_hw.EG10_PWROFF();
loovee 0:6d297fe482af 136 iot_hw.grovePwrOff();
loovee 0:6d297fe482af 137 wdt_sleep.sleep(BROADCAST_TIME);
loovee 0:6d297fe482af 138
loovee 0:6d297fe482af 139 DBG("wake");
loovee 0:6d297fe482af 140 goto PWRON;
loovee 0:6d297fe482af 141 #else
loovee 0:6d297fe482af 142
loovee 0:6d297fe482af 143 wait(5);
loovee 0:6d297fe482af 144 #endif
loovee 0:6d297fe482af 145 }
loovee 0:6d297fe482af 146 }
loovee 0:6d297fe482af 147
loovee 0:6d297fe482af 148 void wdt_sleep_demo()
loovee 0:6d297fe482af 149 {
loovee 0:6d297fe482af 150 DBG("begin to poweron\r\n");
loovee 0:6d297fe482af 151 // power_on();
loovee 0:6d297fe482af 152 wdt_sleep.wdtClkSetup(WDTCLK_SRC_IRC_OSC);
loovee 0:6d297fe482af 153
loovee 0:6d297fe482af 154 // start led
loovee 0:6d297fe482af 155 for(int i=0; i<5; i++)
loovee 0:6d297fe482af 156 {
loovee 0:6d297fe482af 157 iot_hw.userLed(2, 1);wait_ms(100);
loovee 0:6d297fe482af 158 iot_hw.userLed(2, 0);wait_ms(100);
loovee 0:6d297fe482af 159 }
loovee 0:6d297fe482af 160
loovee 0:6d297fe482af 161
loovee 0:6d297fe482af 162 // cut power
loovee 0:6d297fe482af 163 for(int i=0; i<10; i++)
loovee 0:6d297fe482af 164 {
loovee 0:6d297fe482af 165 wait(0.1);
loovee 0:6d297fe482af 166 wdt_sleep.feed();
loovee 0:6d297fe482af 167 }
loovee 0:6d297fe482af 168 iot_hw.EG10_PWROFF();
loovee 0:6d297fe482af 169 iot_hw.grovePwrOff();
loovee 0:6d297fe482af 170
loovee 0:6d297fe482af 171 while(1)
loovee 0:6d297fe482af 172 {
loovee 0:6d297fe482af 173 #if 0
loovee 0:6d297fe482af 174 DBG("sleep\r\n");
loovee 0:6d297fe482af 175 wait(0.1);
loovee 0:6d297fe482af 176 //wdt_sleep.gotoSleep();
loovee 0:6d297fe482af 177 DBG("wake\r\n");
loovee 0:6d297fe482af 178 for(int i=0; i<5; i++)
loovee 0:6d297fe482af 179 {
loovee 0:6d297fe482af 180 wait(1);
loovee 0:6d297fe482af 181 wdt_sleep.feed();
loovee 0:6d297fe482af 182 }
loovee 0:6d297fe482af 183 #else
loovee 0:6d297fe482af 184 DBG("sleep 5s\r\n");
loovee 0:6d297fe482af 185 wait(0.1);
loovee 0:6d297fe482af 186 wdt_sleep.sleep(5);
loovee 0:6d297fe482af 187
loovee 0:6d297fe482af 188 DBG("wake\r\n");
loovee 0:6d297fe482af 189 for(int i=0; i<10; i++)
loovee 0:6d297fe482af 190 {
loovee 0:6d297fe482af 191 wait(0.5);
loovee 0:6d297fe482af 192 wdt_sleep.feed();
loovee 0:6d297fe482af 193 }
loovee 0:6d297fe482af 194
loovee 0:6d297fe482af 195 #endif
loovee 0:6d297fe482af 196 }
loovee 0:6d297fe482af 197 }
loovee 0:6d297fe482af 198
loovee 0:6d297fe482af 199
loovee 0:6d297fe482af 200 int main(void)
loovee 0:6d297fe482af 201 {
loovee 0:6d297fe482af 202 //wdt_sleep_demo();
loovee 0:6d297fe482af 203 iot_demo();
loovee 0:6d297fe482af 204 }
loovee 0:6d297fe482af 205
loovee 0:6d297fe482af 206 /*********************************************************************************************************
loovee 0:6d297fe482af 207 END FILE
loovee 0:6d297fe482af 208 *********************************************************************************************************/