Using TCP Client on WIZwiki-W7500, display weather conditions on led and temperature with servo-motor
Dependencies: WIZnetInterface mbed-src
Prerequisite
This example is for PIR test using digital I/O.
To implement this function, you need a Platform board, network Interface board.
- WIZwiki-W7500 from WIZnet (Platform board and Ethernet I/F board)
Hardware Configuration
WIZwiki-W7500 Pin map

Just connect Ethernet Cable & USB Cable
Software
Init Ethernet
void initEthernet(uint8_t* mac_addr) {
int phy_link;
eth.init(mac_addr); //Use DHCP
eth.connect();
/* phy link */
do{
phy_link = eth.ethernet_link();
printf(".");
wait(2);
}while(!phy_link);
printf("\r\n");
printf("IP Address is %s\r\n", eth.getIPAddress());
}
Request to server using HTTP
void requestHTTP(void)
{
char req_buf[256];
/* TCP socket connect */
sock.connect(WEB_SERVER, 80);
/* Request to WEB Server using HTTP */
sprintf(req_buf,"GET /data/2.5/weather?q=%s,%s&appid=%s HTTP/1.1\nHost: %s\nConnection: close\n\n",
CITY,COUNTRY, API_KEY, WEB_SERVER);
sock.send_all(req_buf, strlen(req_buf));
}
Get data from server & Parsing it
void parsingGetData(void)
{
char buffer[1024];
/* get info */
int ret;
while (true) {
ret = sock.receive_all(buffer, sizeof(buffer)-1);
if (ret <= 0) break;
buffer[ret] = '\0';
pc.printf("Received %d chars from server: %s\n", ret, buffer);
}
/* parsing weather, city, tempurature */
char *weather;
char *city;
char *temp;
uint8_t i;
pc.printf("\r\n\r\n======== WeatherForecast ========\r\n");
weather = strstr(buffer, "main");
pc.printf("\t State : ");
for(i = 7; i < 20; i++)
{
if(*(weather+i) == '\"') break;
pc.printf("%c", *(weather+i));
}
city = strstr(buffer, "name");
pc.printf("\r\n\t City : ");
for(i = 7; i < 20; i++)
{
if(*(city+i) == '\"') break;
pc.printf("%c", *(city+i));
}
temp = strstr(buffer, "temp");
pc.printf("\r\n\t temp(kelvin) : ");
for(i = 6; i < 12; i++)
{
if((*(temp+i) == '\"')||(*(temp+i) == ',')) break;
pc.printf("%c", *(temp+i));
}
pc.printf("\r\n\r\n");
}
Caution
Must fix API_KEY & MAC Address
Revision 17:ca0b0402a4fe, committed 2015-06-26
- Comitter:
- joon874
- Date:
- Fri Jun 26 00:05:31 2015 +0000
- Parent:
- 16:69e41cbbc8ac
- Child:
- 18:a02a73acd3c8
- Commit message:
- Using TCP Client with WIZwiki-W7500, Have your own Weatherforecast.
Changed in this revision
--- a/EthernetInterface.lib Sun Sep 21 05:55:13 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/mbed_official/code/EthernetInterface/#5887ae6c0c2c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Servo.lib Fri Jun 26 00:05:31 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/Servo/#36b69a7ced07
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WIZnetInterface.lib Fri Jun 26 00:05:31 2015 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/teams/WIZnet/code/WIZnetInterface/#7d7553e0578e
--- a/main.cpp Sun Sep 21 05:55:13 2014 +0000
+++ b/main.cpp Fri Jun 26 00:05:31 2015 +0000
@@ -1,31 +1,119 @@
#include "mbed.h"
#include "EthernetInterface.h"
+#include "Servo.h"
+
+DigitalOut bled(D6);
+DigitalOut gled(D5);
+DigitalOut rled(D4);
+
+Servo myservo(D15);
int main() {
+
+ int phy_link;
+ printf("Wait a second...\r\n");
+ uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x00, 0x01, 0x02};
+
EthernetInterface eth;
- eth.init(); //Use DHCP
+ eth.init(mac_addr); //Use DHCP
+
+ while(1){
+
eth.connect();
- printf("IP Address is %s\n", eth.getIPAddress());
+ /* phy link */
+ do{
+ phy_link = eth.ethernet_link();
+ printf("...");
+ wait(2);
+ }while(!phy_link);
+ printf("\r\n");
+
+ printf("IP Address is %s\r\n", eth.getIPAddress());
+
+ /* TCP socket connect */
TCPSocketConnection sock;
- sock.connect("mbed.org", 80);
+ sock.connect("api.openweathermap.org", 80);
- char http_cmd[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\n\n";
+ /* weather */
+ char http_cmd[] = "GET /data/2.5/weather?q=Seoul,kr HTTP/1.0\n\n";
+ //char http_cmd[] = "GET /data/2.5/weather?q=London,uk HTTP/1.0\n\n";
+ //char http_cmd[] = "GET /data/2.5/weather?q=Berlin,de HTTP/1.0\n\n";
sock.send_all(http_cmd, sizeof(http_cmd)-1);
- char buffer[300];
+ /* get info */
+ char buffer[500];
int ret;
while (true) {
ret = sock.receive(buffer, sizeof(buffer)-1);
if (ret <= 0)
break;
buffer[ret] = '\0';
- printf("Received %d chars from server:\n%s\n", ret, buffer);
+ printf("Received %d chars from server: %s\n", ret, buffer);
}
-
+
+ /* get weather, city, tempurature */
+ char *weather;
+ char *city;
+ char *tempure;
+
+ char weather_stu[3];
+ char city_name[6];
+ char tempure_data[6];
+
+ weather = strstr(buffer, "main");
+ printf("%.4s\n", weather + 7);
+ for(int i=0; i<3;i++){
+ weather_stu[i] = weather[i+7];
+ }
+
+ city = strstr(buffer, "name");
+ printf("%.6s\n", city + 7);
+ for(int k=0; k<6;k++){
+ city_name[k] = city[k+7];
+ printf("%c",city_name[k]);
+ }
+
+ tempure = strstr(buffer, "temp");
+ printf("%.3s\n", tempure + 6);
+ for(int j=0; j<6;j++){
+ tempure_data[j] = tempure[j+6];
+ printf("%c",tempure_data[j]);
+ }
+
+ /*tempurature display */
+ float data[2]={0};
+ data[0] = tempure_data[1]-'7';
+ data[1] = tempure_data[2]-'3';
+
+ myservo = (data[0]*10+data[1])/40;
+
+ printf("%f",(data[0]*10+data[1])/40);
+
+ /* weather display */
+ if(strcmp(weather_stu,"Clo")==0) {
+ rled = 1;
+ gled = 1;
+ bled = 1;
+ }else if(strcmp(weather_stu,"Rai")==0) {
+ rled = 0;
+ gled = 0;
+ bled = 1;
+ }else if(strcmp(weather_stu,"Cle")==0){
+ rled = 1;
+ gled = 1;
+ bled = 0;
+ }else {
+ rled = 0;
+ bled = 0;
+ gled = 0;
+ }
+
sock.close();
eth.disconnect();
- while(1) {}
-}
+ wait(60.0);
+ };
+
+}
\ No newline at end of file
--- a/mbed-rtos.lib Sun Sep 21 05:55:13 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/mbed_official/code/mbed-rtos/#631c0f1008c3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-src.lib Fri Jun 26 00:05:31 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-src/#30f9462b5296
--- a/mbed.bld Sun Sep 21 05:55:13 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/552587b429a1 \ No newline at end of file