for znrobotics workshop
Dependencies: DHT22 HTTPClient SDFileSystem WIZnet_Library mbed
Fork of archlink_Temperture_dweetio by
This program is for seeed arch link, using wiznet w550 ethernet interface. not compatible with mbed ethernet interface.
main.cpp@8:0f34e39a6674, 2016-06-28 (annotated)
- 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?
User | Revision | Line number | New 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 | } |