for znrobotics workshop

Dependencies:   DHT22 HTTPClient SDFileSystem WIZnet_Library mbed

Fork of archlink_Temperture_dweetio by Kevin Lee

This program is for seeed arch link, using wiznet w550 ethernet interface. not compatible with mbed ethernet interface.

Committer:
menggang
Date:
Mon Jun 20 11:14:37 2016 +0000
Revision:
7:98c5b9eba03a
Parent:
6:dbf5cf5ca7b1
Child:
8:0f34e39a6674
version 2.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
menggang 7:98c5b9eba03a 1 // provided by znrobotics.
Kevin_Lee 0:29bbc7eec5e1 2 #include "mbed.h"
Kevin_Lee 0:29bbc7eec5e1 3 #include "SDFileSystem.h"
Kevin_Lee 0:29bbc7eec5e1 4 #include "WIZnetInterface.h"
Kevin_Lee 2:8b304d2b4ca5 5 #include "HTTPClient.h"
menggang 5:35f80d88820f 6 #include "DHT22.h"
Kevin_Lee 0:29bbc7eec5e1 7
Kevin_Lee 2:8b304d2b4ca5 8 #define USE_DHCP 0
Kevin_Lee 0:29bbc7eec5e1 9 #define LOOPBACKPORT 5000
menggang 5:35f80d88820f 10
menggang 7:98c5b9eba03a 11 const int USE_HTTP_PROTOCAL = 1;
menggang 7:98c5b9eba03a 12 const int USE_COAP_PROTOCAL = 2;
menggang 7:98c5b9eba03a 13 const int USE_MQTT_PROTOCAL = 3;
menggang 7:98c5b9eba03a 14
Kevin_Lee 0:29bbc7eec5e1 15 int W5500_Test(void);
Kevin_Lee 1:0f6a216263aa 16
menggang 5:35f80d88820f 17 float* temperature_get(); /* Grove - Temperature Sensor V1.2 */
menggang 5:35f80d88820f 18 float th[2];
Kevin_Lee 3:cfc6ff08a668 19
Kevin_Lee 0:29bbc7eec5e1 20 SPI spi(SPI_PSELMOSI0, SPI_PSELMISO0, SPI_PSELSCK0);
Kevin_Lee 0:29bbc7eec5e1 21 WIZnetInterface ethernet(&spi, p24, p17); // Spi ,cs, reset
Kevin_Lee 0:29bbc7eec5e1 22 int ret, dummy, lv = 1;
menggang 7:98c5b9eba03a 23
menggang 7:98c5b9eba03a 24 const char* http_port = "9090";
menggang 7:98c5b9eba03a 25 const char* coap_port = "5683";
menggang 7:98c5b9eba03a 26 const char* mqtt_port = "1883";
menggang 7:98c5b9eba03a 27
menggang 7:98c5b9eba03a 28 // todo:: your settings here.
menggang 7:98c5b9eba03a 29 //const char * SERVER_REMOTE = "58.214.20.195";
menggang 7:98c5b9eba03a 30 const char * SERVER_REMOTE = "52.76.14.222";
menggang 7:98c5b9eba03a 31 const char * IP_Addr = "192.168.1.223";
Kevin_Lee 0:29bbc7eec5e1 32 const char * IP_Subnet = "255.255.255.0";
menggang 5:35f80d88820f 33 const char * IP_Gateway = "192.168.1.1";
menggang 5:35f80d88820f 34 const char * DEVICE_ID = "933691ed-1f00-4826-953a-d56841f65240";
Kevin_Lee 0:29bbc7eec5e1 35 unsigned char MAC_Addr[6] = {0x00,0x08,0xDC,0x1C,0xAA,0xCA};
menggang 7:98c5b9eba03a 36 // which protocal to use
menggang 7:98c5b9eba03a 37 // 1 => HTTP;
menggang 7:98c5b9eba03a 38 // 2 => CoAP;
menggang 7:98c5b9eba03a 39 // 3 => MQTT
menggang 7:98c5b9eba03a 40 const int PROTOCAL_INUSE = 1;
menggang 7:98c5b9eba03a 41 // unit: seconds;
menggang 7:98c5b9eba03a 42 const int time_interval = 15; //seconds
menggang 5:35f80d88820f 43
menggang 5:35f80d88820f 44 // timer event;
menggang 6:dbf5cf5ca7b1 45 Ticker flipper;
menggang 5:35f80d88820f 46 void timer_ticked();
Kevin_Lee 0:29bbc7eec5e1 47
Kevin_Lee 0:29bbc7eec5e1 48 DigitalOut myled(LED1);
Kevin_Lee 0:29bbc7eec5e1 49 //Arch Link
Kevin_Lee 0:29bbc7eec5e1 50 Serial pc(USBTX, USBRX); /* uart */
menggang 5:35f80d88820f 51 DHT22 dht22(p6);
Kevin_Lee 3:cfc6ff08a668 52
Kevin_Lee 3:cfc6ff08a668 53 AnalogIn ain(A0);
Kevin_Lee 3:cfc6ff08a668 54
Kevin_Lee 0:29bbc7eec5e1 55 int main() {
Kevin_Lee 0:29bbc7eec5e1 56 wait(1);
menggang 5:35f80d88820f 57 pc.baud(9600);
Kevin_Lee 0:29bbc7eec5e1 58 wait(1);
Kevin_Lee 3:cfc6ff08a668 59
Kevin_Lee 2:8b304d2b4ca5 60 if(W5500_Test() == 0) { // Internet is ok
Kevin_Lee 0:29bbc7eec5e1 61 printf("W5500 tested OK \r\n");
Kevin_Lee 1:0f6a216263aa 62
menggang 5:35f80d88820f 63 // start timer tick event.
menggang 6:dbf5cf5ca7b1 64 flipper.attach(&timer_ticked, time_interval);
Kevin_Lee 0:29bbc7eec5e1 65 }
Kevin_Lee 0:29bbc7eec5e1 66
Kevin_Lee 0:29bbc7eec5e1 67 while(1) {
menggang 6:dbf5cf5ca7b1 68 myled = !myled;
menggang 6:dbf5cf5ca7b1 69 wait(10);
Kevin_Lee 0:29bbc7eec5e1 70 }
Kevin_Lee 0:29bbc7eec5e1 71 }
Kevin_Lee 0:29bbc7eec5e1 72
menggang 5:35f80d88820f 73 void timer_ticked()
menggang 5:35f80d88820f 74 {
menggang 6:dbf5cf5ca7b1 75 char str[512];
menggang 7:98c5b9eba03a 76 char get_msg[256]= "";
menggang 5:35f80d88820f 77
menggang 6:dbf5cf5ca7b1 78 float* th = temperature_get();
menggang 6:dbf5cf5ca7b1 79 printf("temperature: %.2f -- Humidity: %.2f.\r\n",th[0], th[1]);
menggang 6:dbf5cf5ca7b1 80
menggang 7:98c5b9eba03a 81 pc.printf("posting message to znrobotics server.\r\n");
menggang 6:dbf5cf5ca7b1 82
menggang 7:98c5b9eba03a 83 switch (PROTOCAL_INUSE)
menggang 6:dbf5cf5ca7b1 84 {
menggang 7:98c5b9eba03a 85 case USE_HTTP_PROTOCAL:
menggang 7:98c5b9eba03a 86 {
menggang 7:98c5b9eba03a 87 // sprintf(get_msg, "http://%s/sensors/temperature?deviceid=%s&temperature=%.2f", SERVER_REMOTE, DEVICE_ID, th[0]);
menggang 7:98c5b9eba03a 88 sprintf(get_msg, "http://52.76.14.222/hello");
menggang 7:98c5b9eba03a 89 // sprintf(get_msg,"http://dweet.io/dweet/for/%s?Temperature=%.2f\r\n","ArchLink", th[0]);
menggang 7:98c5b9eba03a 90 HTTPClient http;
menggang 7:98c5b9eba03a 91
menggang 7:98c5b9eba03a 92 pc.printf("msg : %s\r\n",get_msg);
menggang 7:98c5b9eba03a 93 ret = http.get(get_msg, str, sizeof(str));
menggang 7:98c5b9eba03a 94 if(!ret)
menggang 7:98c5b9eba03a 95 {
menggang 7:98c5b9eba03a 96 pc.printf("\r\nPage fetched successfully - read %d characters\r\n", strlen(str));
menggang 7:98c5b9eba03a 97 pc.printf("Result: %s\r\n", str);
menggang 7:98c5b9eba03a 98 }
menggang 7:98c5b9eba03a 99 else
menggang 7:98c5b9eba03a 100 {
menggang 7:98c5b9eba03a 101 pc.printf("Error - ret = %d - HTTP return code = %d\n", ret, http.getHTTPResponseCode());
menggang 7:98c5b9eba03a 102 }
menggang 7:98c5b9eba03a 103 }
menggang 7:98c5b9eba03a 104 break;
menggang 7:98c5b9eba03a 105 case USE_COAP_PROTOCAL:
menggang 7:98c5b9eba03a 106 {
menggang 7:98c5b9eba03a 107
menggang 7:98c5b9eba03a 108 }
menggang 7:98c5b9eba03a 109 break;
menggang 7:98c5b9eba03a 110 case USE_MQTT_PROTOCAL:
menggang 7:98c5b9eba03a 111 {
menggang 7:98c5b9eba03a 112
menggang 7:98c5b9eba03a 113 }
menggang 7:98c5b9eba03a 114 break;
menggang 6:dbf5cf5ca7b1 115 }
menggang 5:35f80d88820f 116 }
menggang 5:35f80d88820f 117
Kevin_Lee 0:29bbc7eec5e1 118 int W5500_Test(void)
Kevin_Lee 0:29bbc7eec5e1 119 {
Kevin_Lee 0:29bbc7eec5e1 120 mbed_mac_address((char *)MAC_Addr); //Use mbed mac addres
Kevin_Lee 0:29bbc7eec5e1 121 wait(1);
Kevin_Lee 0:29bbc7eec5e1 122 printf("Start to test ethernet!\r\n");
Kevin_Lee 0:29bbc7eec5e1 123
Kevin_Lee 0:29bbc7eec5e1 124 #if USE_DHCP
Kevin_Lee 0:29bbc7eec5e1 125 printf("use DHCP\r\n");
Kevin_Lee 0:29bbc7eec5e1 126 ret = ethernet.init(MAC_Addr);
Kevin_Lee 0:29bbc7eec5e1 127 #else
Kevin_Lee 0:29bbc7eec5e1 128 printf("do NOT use DHCP\r\n");
Kevin_Lee 0:29bbc7eec5e1 129 int ret = ethernet.init(MAC_Addr,IP_Addr,IP_Subnet,IP_Gateway);
Kevin_Lee 0:29bbc7eec5e1 130 #endif
Kevin_Lee 0:29bbc7eec5e1 131
Kevin_Lee 0:29bbc7eec5e1 132 if (!ret) {
Kevin_Lee 0:29bbc7eec5e1 133 pc.printf("Initialized, MAC: %s\r\n", ethernet.getMACAddress());
Kevin_Lee 0:29bbc7eec5e1 134 ret = ethernet.connect();
Kevin_Lee 0:29bbc7eec5e1 135 if (!ret) {
menggang 7:98c5b9eba03a 136 pc.printf("IP: %s, MASK: %s, GW: %s\r\n", ethernet.getIPAddress(), ethernet.getNetworkMask(), ethernet.getGateway());
Kevin_Lee 0:29bbc7eec5e1 137 return 0;
Kevin_Lee 0:29bbc7eec5e1 138 } else {
Kevin_Lee 0:29bbc7eec5e1 139 pc.printf("Error ethernet.connect() - ret = %d\r\n", ret);
Kevin_Lee 0:29bbc7eec5e1 140 //exit(0);
Kevin_Lee 0:29bbc7eec5e1 141 return -1;
Kevin_Lee 0:29bbc7eec5e1 142 }
Kevin_Lee 0:29bbc7eec5e1 143 } else {
Kevin_Lee 0:29bbc7eec5e1 144 pc.printf("Error ethernet.init() - ret = %d\r\n", ret);
Kevin_Lee 0:29bbc7eec5e1 145 //exit(0);
Kevin_Lee 0:29bbc7eec5e1 146 return -1;
Kevin_Lee 0:29bbc7eec5e1 147 }
Kevin_Lee 3:cfc6ff08a668 148 }
Kevin_Lee 3:cfc6ff08a668 149
menggang 5:35f80d88820f 150 float* temperature_get()
Kevin_Lee 3:cfc6ff08a668 151 {
menggang 5:35f80d88820f 152 int error = 0;
menggang 5:35f80d88820f 153
menggang 5:35f80d88820f 154 float temp, hum;
menggang 5:35f80d88820f 155
menggang 5:35f80d88820f 156 error = dht22.sample();
menggang 5:35f80d88820f 157
menggang 5:35f80d88820f 158 // read successfully
menggang 5:35f80d88820f 159 if (1 == error) {
menggang 5:35f80d88820f 160 // YOUR CODE GOES HERE, read temperature and humidity
menggang 5:35f80d88820f 161 temp = dht22.getTemperature()/10.0f; //TODO;
menggang 5:35f80d88820f 162 hum = dht22.getHumidity()/10.0f; //TODO;
menggang 5:35f80d88820f 163 th[0] = temp;
menggang 5:35f80d88820f 164 th[1] = hum;
menggang 5:35f80d88820f 165 // printf("temp: %2.2f , hum:%2.2f \r\n",temp,hum);
menggang 5:35f80d88820f 166 } else {
menggang 5:35f80d88820f 167 printf("Error: %d\n", error);
menggang 5:35f80d88820f 168 }
menggang 5:35f80d88820f 169
menggang 5:35f80d88820f 170 return th;
menggang 5:35f80d88820f 171 }