[WIZwiki_W7500ECO] HTTPClient with JSON parser

details

This post shows how to use HTTPClient parse JSON data in the ARMmbed platform.

w7500

JSON is easy for machines to parse and generate which is based on a subset of the JavaScript Programming Language. Currently, many Web Services allow accessing data in JSON format. However, JSON parser is too big for the low-end device as like an ARMmbed platform which has limited-resource. This post shows how to use HTTPClient parse JSON data in the ARMmbed platform.

Preparation materials

  1. Software

* JSON Parser: MbedJSONValue libs
* Ethernet Networking: WIZnetInterface
* HTTP Server with JSON: Fraka6 Blog – No Free Lunch: The simplest python server example 
2. Hardware
* WIZwiki-W7500ECONET: WIZwiki-W7500 + ECO Shield Ethernet

IMG_20151029_164448

  • ARMmbed Board: WIZwiki-W7500ECO
    wizwiki-w7500eco_simplepinout
  • Ethernet Shield: ECO Shield Ethernet
    wizwiki-w7500eco_shield_pinout
  • Simplest python JSON server on PC

    • Reference : fraka6.blogsopot.kr: The simplest python server example
    • Modify Server IP address & port on ron_handler
      def run(port=8000): #set port
      
        print('http server is starting...')
        #ip and port of server
        #server_address = ('127.0.0.1', port)
        server_address = ('192.168.0.223', port)#set port
        httpd = HTTPServer(server_address, Handler)
        print('http server is running...listening on port %s' %port)
        httpd.serve_forever() 
    • Modify JSON form in do_GET handler
      #handle GET command
      def do_GET(self):
        if format == 'html':
            self.send_response(200)
            self.send_header("Content-type", "text/plain")
            self.send_header('Content-type','text-html')
            self.end_headers()
            self.wfile.write("body")
        elif format == 'json':
            #self.request.sendall(json.dumps({'path':self.path}))
            #self.request.sendall(json.dumps({'pi':3.14}))
            self.request.sendall(json.dumps({'name':'John snow', 'age': 30, 'gender':'male'}))
        else:
            self.request.sendall("%s\t%s" %('path', self.path))
        return 
    • Excute json_server
    • Test by using curl
       $>curl ip_address:port_number 

    Make main.cc

    1. Network Configration for WIZwiki-W7500ECO
       // Enter a MAC address for your controller below.
       uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x00, 0x01, 0x02};
      
       printf("initializing Ethernet\r\n");
       // initializing MAC address
       eth.init(mac_addr, "192.168.0.34", "255.255.255.0", "192.168.0.1");
      
       // Check Ethenret Link
       if(eth.link() == true)   printf("- Ethernet PHY Link-Done \r\n");
       else printf("- Ethernet PHY Link- Fail\r\n");
      
       // Start Ethernet connecting: Trying to get an IP address using DHCP
       if (eth.connect()<0)    printf("Fail - Ethernet Connecing"); 
    2. TCP connect to simple python JSON server
       sock.connect("192.168.0.223", 8000); // "destination IP address", destination port number 
    3. Make Get form in HTTP format
       snprintf(http_tx_msg, http_tx_msg_sz,  "GET / HTTP/1.1\r\nHost: 192.168.0.223:8000\r\nUser-Agent: WIZwiki-W7500ECO\r\nConection: close\r\n\r\n"); 
    4. TCP Send Get form
       sock.send_all(http_tx_msg, http_tx_msg_sz-1); // tx_buf, tx_buf_size 
    5. TCP Recv data in JSON format
       while ( (returnCode = sock.receive(http_rx_msg, http_rx_msg_sz-1)) > 0) {
               http_rx_msg[returnCode] = '\0';
               printf("Received %d chars from server:\n\r%s\n", returnCode, http_rx_msg);
           } 
    6. Do JSON parse
       parse(parser, http_rx_msg); 
    7. Output the parsed data
       // parsing "string" in string type
       printf("name =%s\r\n" , parser["name"].get<string>().c_str());
       // parsing "age" in integer type
       printf("age =%d\r\n" , parser["age"].get<int>());
       // parsing "gender" in string type
       printf("gender =%s\r\n" , parser["gender"].get<string>().c_str()); 

    Demo. HTTPClient with JSON parser

    1. Network config.
    2. Confirm Received JSON data
    3. Print-out the passing data

code

 

Bitbucket
Source:

https://www.hackster.io/embeddist/wizwiki-w7500eco-httpclient-with-json-parser-f96641

This post shows how to use HTTPClient parse JSON data in the ARMmbed platform.

w7500

JSON is easy for machines to parse and generate which is based on a subset of the JavaScript Programming Language. Currently, many Web Services allow accessing data in JSON format. However, JSON parser is too big for the low-end device as like an ARMmbed platform which has limited-resource. This post shows how to use HTTPClient parse JSON data in the ARMmbed platform.

Preparation materials

  1. Software

* JSON Parser: MbedJSONValue libs
* Ethernet Networking: WIZnetInterface
* HTTP Server with JSON: Fraka6 Blog – No Free Lunch: The simplest python server example 
2. Hardware
* WIZwiki-W7500ECONET: WIZwiki-W7500 + ECO Shield Ethernet

IMG_20151029_164448

  • ARMmbed Board: WIZwiki-W7500ECO
    wizwiki-w7500eco_simplepinout
  • Ethernet Shield: ECO Shield Ethernet
    wizwiki-w7500eco_shield_pinout
  • Simplest python JSON server on PC

    • Reference : fraka6.blogsopot.kr: The simplest python server example
    • Modify Server IP address & port on ron_handler
      def run(port=8000): #set port
      
        print('http server is starting...')
        #ip and port of server
        #server_address = ('127.0.0.1', port)
        server_address = ('192.168.0.223', port)#set port
        httpd = HTTPServer(server_address, Handler)
        print('http server is running...listening on port %s' %port)
        httpd.serve_forever() 
    • Modify JSON form in do_GET handler
      #handle GET command
      def do_GET(self):
        if format == 'html':
            self.send_response(200)
            self.send_header("Content-type", "text/plain")
            self.send_header('Content-type','text-html')
            self.end_headers()
            self.wfile.write("body")
        elif format == 'json':
            #self.request.sendall(json.dumps({'path':self.path}))
            #self.request.sendall(json.dumps({'pi':3.14}))
            self.request.sendall(json.dumps({'name':'John snow', 'age': 30, 'gender':'male'}))
        else:
            self.request.sendall("%s\t%s" %('path', self.path))
        return 
    • Excute json_server
    • Test by using curl
       $>curl ip_address:port_number 

    Make main.cc

    1. Network Configration for WIZwiki-W7500ECO
       // Enter a MAC address for your controller below.
       uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x00, 0x01, 0x02};
      
       printf("initializing Ethernet\r\n");
       // initializing MAC address
       eth.init(mac_addr, "192.168.0.34", "255.255.255.0", "192.168.0.1");
      
       // Check Ethenret Link
       if(eth.link() == true)   printf("- Ethernet PHY Link-Done \r\n");
       else printf("- Ethernet PHY Link- Fail\r\n");
      
       // Start Ethernet connecting: Trying to get an IP address using DHCP
       if (eth.connect()<0)    printf("Fail - Ethernet Connecing"); 
    2. TCP connect to simple python JSON server
       sock.connect("192.168.0.223", 8000); // "destination IP address", destination port number 
    3. Make Get form in HTTP format
       snprintf(http_tx_msg, http_tx_msg_sz,  "GET / HTTP/1.1\r\nHost: 192.168.0.223:8000\r\nUser-Agent: WIZwiki-W7500ECO\r\nConection: close\r\n\r\n"); 
    4. TCP Send Get form
       sock.send_all(http_tx_msg, http_tx_msg_sz-1); // tx_buf, tx_buf_size 
    5. TCP Recv data in JSON format
       while ( (returnCode = sock.receive(http_rx_msg, http_rx_msg_sz-1)) > 0) {
               http_rx_msg[returnCode] = '\0';
               printf("Received %d chars from server:\n\r%s\n", returnCode, http_rx_msg);
           } 
    6. Do JSON parse
       parse(parser, http_rx_msg); 
    7. Output the parsed data
       // parsing "string" in string type
       printf("name =%s\r\n" , parser["name"].get<string>().c_str());
       // parsing "age" in integer type
       printf("age =%d\r\n" , parser["age"].get<int>());
       // parsing "gender" in string type
       printf("gender =%s\r\n" , parser["gender"].get<string>().c_str()); 

    Demo. HTTPClient with JSON parser

    1. Network config.
    2. Confirm Received JSON data
    3. Print-out the passing data

code

 

Bitbucket
Source:

https://www.hackster.io/embeddist/wizwiki-w7500eco-httpclient-with-json-parser-f96641

COMMENTS

Please Login to comment
  Subscribe  
Notify of