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:
Tue Jun 28 09:18:37 2016 +0000
Revision:
8:0f34e39a6674
Parent:
7:98c5b9eba03a
for znrobotics workshop.

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
menggang 8:0f34e39a6674 8 #define USE_DHCP 1
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 8:0f34e39a6674 24 const char* http_port = "80";
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 8:0f34e39a6674 34 const char * DEVICE_ID = "1570f165-89ca-4fdf-a625-86736c8afd23";
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 8:0f34e39a6674 42 const int time_interval = 60; //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 8:0f34e39a6674 76 char get_msg[512]= "";
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 HTTPClient http;
menggang 8:0f34e39a6674 88
menggang 8:0f34e39a6674 89 sprintf(get_msg, "http://%s/sensors/things?deviceid=%s&temperature=%.2f", SERVER_REMOTE, DEVICE_ID, th[0]);
menggang 7:98c5b9eba03a 90 pc.printf("msg : %s\r\n",get_msg);
menggang 7:98c5b9eba03a 91 ret = http.get(get_msg, str, sizeof(str));
menggang 7:98c5b9eba03a 92 if(!ret)
menggang 7:98c5b9eba03a 93 {
menggang 8:0f34e39a6674 94 pc.printf("Response fetched successfully - read %d characters\r\n", strlen(str));
menggang 7:98c5b9eba03a 95 pc.printf("Result: %s\r\n", str);
menggang 7:98c5b9eba03a 96 }
menggang 7:98c5b9eba03a 97 else
menggang 7:98c5b9eba03a 98 {
menggang 7:98c5b9eba03a 99 pc.printf("Error - ret = %d - HTTP return code = %d\n", ret, http.getHTTPResponseCode());
menggang 8:0f34e39a6674 100 }
menggang 8:0f34e39a6674 101
menggang 8:0f34e39a6674 102 sprintf(get_msg, "http://%s/sensors/things?deviceid=%s&humidity=%.2f", SERVER_REMOTE, DEVICE_ID, th[1]);
menggang 8:0f34e39a6674 103 pc.printf("msg : %s\r\n",get_msg);
menggang 8:0f34e39a6674 104 ret = http.get(get_msg, str, sizeof(str));
menggang 8:0f34e39a6674 105 if(!ret)
menggang 8:0f34e39a6674 106 {
menggang 8:0f34e39a6674 107 pc.printf("Response fetched successfully - read %d characters\r\n", strlen(str));
menggang 8:0f34e39a6674 108 pc.printf("Result: %s\r\n", str);
menggang 8:0f34e39a6674 109 }
menggang 8:0f34e39a6674 110 else
menggang 8:0f34e39a6674 111 {
menggang 8:0f34e39a6674 112 pc.printf("Error - ret = %d - HTTP return code = %d\n", ret, http.getHTTPResponseCode());
menggang 8:0f34e39a6674 113 }
menggang 7:98c5b9eba03a 114 }
menggang 7:98c5b9eba03a 115 break;
menggang 7:98c5b9eba03a 116 case USE_COAP_PROTOCAL:
menggang 7:98c5b9eba03a 117 {
menggang 7:98c5b9eba03a 118
menggang 7:98c5b9eba03a 119 }
menggang 7:98c5b9eba03a 120 break;
menggang 7:98c5b9eba03a 121 case USE_MQTT_PROTOCAL:
menggang 7:98c5b9eba03a 122 {
menggang 7:98c5b9eba03a 123
menggang 7:98c5b9eba03a 124 }
menggang 7:98c5b9eba03a 125 break;
menggang 6:dbf5cf5ca7b1 126 }
menggang 8:0f34e39a6674 127
menggang 8:0f34e39a6674 128 pc.printf("\n");
menggang 5:35f80d88820f 129 }
menggang 5:35f80d88820f 130
Kevin_Lee 0:29bbc7eec5e1 131 int W5500_Test(void)
Kevin_Lee 0:29bbc7eec5e1 132 {
Kevin_Lee 0:29bbc7eec5e1 133 mbed_mac_address((char *)MAC_Addr); //Use mbed mac addres
Kevin_Lee 0:29bbc7eec5e1 134 wait(1);
Kevin_Lee 0:29bbc7eec5e1 135 printf("Start to test ethernet!\r\n");
Kevin_Lee 0:29bbc7eec5e1 136
Kevin_Lee 0:29bbc7eec5e1 137 #if USE_DHCP
Kevin_Lee 0:29bbc7eec5e1 138 printf("use DHCP\r\n");
Kevin_Lee 0:29bbc7eec5e1 139 ret = ethernet.init(MAC_Addr);
Kevin_Lee 0:29bbc7eec5e1 140 #else
Kevin_Lee 0:29bbc7eec5e1 141 printf("do NOT use DHCP\r\n");
Kevin_Lee 0:29bbc7eec5e1 142 int ret = ethernet.init(MAC_Addr,IP_Addr,IP_Subnet,IP_Gateway);
Kevin_Lee 0:29bbc7eec5e1 143 #endif
Kevin_Lee 0:29bbc7eec5e1 144
Kevin_Lee 0:29bbc7eec5e1 145 if (!ret) {
Kevin_Lee 0:29bbc7eec5e1 146 pc.printf("Initialized, MAC: %s\r\n", ethernet.getMACAddress());
Kevin_Lee 0:29bbc7eec5e1 147 ret = ethernet.connect();
Kevin_Lee 0:29bbc7eec5e1 148 if (!ret) {
menggang 7:98c5b9eba03a 149 pc.printf("IP: %s, MASK: %s, GW: %s\r\n", ethernet.getIPAddress(), ethernet.getNetworkMask(), ethernet.getGateway());
Kevin_Lee 0:29bbc7eec5e1 150 return 0;
Kevin_Lee 0:29bbc7eec5e1 151 } else {
Kevin_Lee 0:29bbc7eec5e1 152 pc.printf("Error ethernet.connect() - ret = %d\r\n", ret);
Kevin_Lee 0:29bbc7eec5e1 153 //exit(0);
Kevin_Lee 0:29bbc7eec5e1 154 return -1;
Kevin_Lee 0:29bbc7eec5e1 155 }
Kevin_Lee 0:29bbc7eec5e1 156 } else {
Kevin_Lee 0:29bbc7eec5e1 157 pc.printf("Error ethernet.init() - ret = %d\r\n", ret);
Kevin_Lee 0:29bbc7eec5e1 158 //exit(0);
Kevin_Lee 0:29bbc7eec5e1 159 return -1;
Kevin_Lee 0:29bbc7eec5e1 160 }
Kevin_Lee 3:cfc6ff08a668 161 }
Kevin_Lee 3:cfc6ff08a668 162
menggang 5:35f80d88820f 163 float* temperature_get()
Kevin_Lee 3:cfc6ff08a668 164 {
menggang 5:35f80d88820f 165 int error = 0;
menggang 5:35f80d88820f 166
menggang 5:35f80d88820f 167 float temp, hum;
menggang 5:35f80d88820f 168
menggang 5:35f80d88820f 169 error = dht22.sample();
menggang 5:35f80d88820f 170
menggang 5:35f80d88820f 171 // read successfully
menggang 5:35f80d88820f 172 if (1 == error) {
menggang 5:35f80d88820f 173 // YOUR CODE GOES HERE, read temperature and humidity
menggang 5:35f80d88820f 174 temp = dht22.getTemperature()/10.0f; //TODO;
menggang 5:35f80d88820f 175 hum = dht22.getHumidity()/10.0f; //TODO;
menggang 5:35f80d88820f 176 th[0] = temp;
menggang 5:35f80d88820f 177 th[1] = hum;
menggang 5:35f80d88820f 178 // printf("temp: %2.2f , hum:%2.2f \r\n",temp,hum);
menggang 5:35f80d88820f 179 } else {
menggang 5:35f80d88820f 180 printf("Error: %d\n", error);
menggang 5:35f80d88820f 181 }
menggang 5:35f80d88820f 182
menggang 5:35f80d88820f 183 return th;
menggang 5:35f80d88820f 184 }