WizFi310 IoTMakers Example
Dependencies: NetworkSocketAPI WizFi310Interface mbed
main.cpp
- Committer:
- jehoon
- Date:
- 2016-10-10
- Revision:
- 0:325e3b1dbec8
File content as of revision 0:325e3b1dbec8:
/* NetworkSocketAPI Example Program * Copyright (c) 2015 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "mbed.h" #include "WizFi310Interface.h" #include "TCPSocket.h" #if defined(TARGET_NUCLEO_F401RE) Serial pc(USBTX,USBRX); WizFi310Interface wifi(PA_11, PA_12, D6, D7, D3, NC, 115200); #endif AnalogIn sensor_illu(PA_1); DigitalOut led(PC_7); InterruptIn button(PC_13); #define AP_SSID "<AP SSID>" #define AP_PASSWORD "<AP Password>" #define AP_SECURITY NSAPI_SECURITY_WPA2 #define IoTMakers_GW_ID "<Gateway ID>" #define IoTMakers_DEV_ID "<Device ID>" #define IoTMakers_DEV_PWD "<Device Password>" #define IoTMakers_MQTT_IP "220.90.216.90" #define IoTMakers_MQTT_PORT 10030 #define DELAY_SEND_TIME_MS 5000 unsigned long g_time_ms = 0; unsigned long g_prev_send_time = 0; unsigned long g_prev_clicked_time = 0; //Button IRQ int button_status = 0; int button_clicked = 0; enum Connection_Step { csDISASSOCIATE = 0, csASSOCIATE, csKTCONNECTED, }CON_STEP; TCPSocket socket(&wifi); WizFi310* pwizfi310 = wifi.get_WizFi310_Pointer(); void Connect_to_AP(); void Connect_to_IoTMakers(); void Send_num_value_to_IoTMakers(const char* tag_stream, const float dvalue); void Send_str_value_to_IoTMakers(const char* tag_stream, const char* svalue); void Button_IRQ(); void Button_Push_Event(); void Periodic_Event(); void time_ms(); void Button_IRQ() { if( button_clicked == 0 && (g_prev_clicked_time + 500) < g_time_ms) { button_clicked = 1; g_prev_clicked_time = g_time_ms; } } void Button_Push_Event() { if( CON_STEP == csKTCONNECTED) { if( button_status == 0 ) { Send_str_value_to_IoTMakers("switch", "on"); button_status = 1; } else if( button_status == 1 ) { Send_str_value_to_IoTMakers("switch", "off"); button_status = 0; } } } void Periodic_Event() { float illumination; if( CON_STEP == csKTCONNECTED) { illumination = sensor_illu.read() * 100; Send_num_value_to_IoTMakers("illumination", (float)illumination); } } int main() { pc.baud(115200); //Timer settings Ticker timer_ms; timer_ms.attach(time_ms, 0.001f); g_prev_send_time = g_time_ms; //button Interrupt button.rise(&Button_IRQ); //normal settings CON_STEP = csDISASSOCIATE; printf("KT IoTMakers Example\r\n"); char buffer[256]; int count; while(1) { switch (CON_STEP) { case csDISASSOCIATE: Connect_to_AP(); break; case csASSOCIATE: Connect_to_IoTMakers(); break; case csKTCONNECTED: if( ( g_prev_send_time + DELAY_SEND_TIME_MS ) < g_time_ms ) { Periodic_Event(); g_prev_send_time = g_time_ms; } if( button_clicked == 1 ) { Button_Push_Event(); button_clicked = 0; } if( pwizfi310->readable(0) > 0) { pwizfi310->recv(0, buffer, sizeof(buffer)); printf("RECV : %s\r\n", buffer); } break; default: break; }; } } void Connect_to_AP() { int i; int ret; for( i=0; i<5; i++ ) { if( CON_STEP != csDISASSOCIATE ) { break; } ret = wifi.connect(AP_SSID, AP_PASSWORD, AP_SECURITY); if( ret == 0 ) //connection success { //const char *ip = wifi.get_ip_address(); //const char *mac = wifi.get_mac_address(); //printf("IP address is: %s\r\n", ip ? ip : "No IP"); //printf("MAC address is: %s\r\n", mac ? mac : "No MAC"); CON_STEP = csASSOCIATE; wait(1); break; } else { printf("CONNECTION FAIL\r\n", ret); CON_STEP = csASSOCIATE; } } } void Connect_to_IoTMakers() { char cmd[100]; int ret = 0; //set_information sprintf(cmd, "AT+TKTSET1=%s,%s,%s,0", IoTMakers_GW_ID, IoTMakers_DEV_ID, IoTMakers_DEV_PWD); pwizfi310->sendCommand(cmd); //connect IoTMakers via MQTT sprintf(cmd, "AT+TKTCON=2,%s,%d,0,1111", IoTMakers_MQTT_IP, IoTMakers_MQTT_PORT); ret = pwizfi310->sendCommand(cmd,WizFi310::RES_NULL,5000); if(ret == 0) { CON_STEP = csKTCONNECTED; } } void Send_num_value_to_IoTMakers(const char* tag_stream, const float dvalue) { char cmd[100]; //send numberic data sprintf(cmd, "AT+TKTSEND=d,%s,%.1f", tag_stream, dvalue); pwizfi310->sendCommand(cmd); } void Send_str_value_to_IoTMakers(const char* tag_stream, const char* svalue) { char cmd[100]; //send string data sprintf(cmd, "AT+TKTSEND=s,%s,%s", tag_stream, svalue); pwizfi310->sendCommand(cmd); } void time_ms() { g_time_ms++; }