mqtt_lora_thingsboard
Dependencies: HTS221 VL53L0X BSP_B-L475E-IOT01 MQTT
Diff: main.cpp
- Revision:
- 1:5a9fdc848911
- Parent:
- 0:8d0ccf7acecd
- Child:
- 2:0fbb5fc452de
- Child:
- 3:a21eb3abb874
--- a/main.cpp Wed Feb 27 18:17:05 2019 +0900 +++ b/main.cpp Tue Dec 10 07:13:20 2019 +0000 @@ -1,41 +1,31 @@ -/* WiFi Example - * Copyright (c) 2016 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. - */ +/* WiFi+MQTT Example + */ #include "mbed.h" #include "TCPSocket.h" #include "wifi-ism43362/ISM43362Interface.h" -#include "treasure-data-rest.h" -// Sensors drivers present in the BSP library -#include "stm32l475e_iot01_tsensor.h" -#include "stm32l475e_iot01_hsensor.h" -#include "stm32l475e_iot01_psensor.h" -#include "stm32l475e_iot01_magneto.h" -#include "stm32l475e_iot01_gyro.h" -#include "stm32l475e_iot01_accelero.h" - -#define BUFF_SIZE 200 +#define logMessage printf +#define MQTTCLIENT_QOS2 1 +#include "MQTTNetwork.h" +#include "MQTTmbed.h" +#include "MQTTClient.h" ISM43362Interface net; // WiFiInterface *wifi; +void messageArrived(MQTT::MessageData& md) +{ + MQTT::Message &message = md.message; + logMessage("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id); + logMessage("Payload %.*s\r\n", message.payloadlen, (char*)message.payload); + //++arrivedcount; +} + int main(void){ int count = 0; - printf("\r\nTreasure Data REST API Demo\n"); + printf("\r\nWiFi+MQTT Example Demo\n"); // Connect to Wifi printf("\nConnecting to %s...\n", MBED_CONF_APP_WIFI_SSID); @@ -52,160 +42,68 @@ printf("Gateway: %s\n", net.get_gateway()); printf("RSSI: %d\n\n", net.get_rssi()); - // Create Treasure data objects (Network, Database, Table, APIKey) - TreasureData_RESTAPI* heap = new TreasureData_RESTAPI(&net,"iot_test","heap_info", MBED_CONF_APP_API_KEY); - TreasureData_RESTAPI* cpu = new TreasureData_RESTAPI(&net,"iot_test","cpu_info", MBED_CONF_APP_API_KEY); - TreasureData_RESTAPI* stack = new TreasureData_RESTAPI(&net,"iot_test","stack_info",MBED_CONF_APP_API_KEY); - TreasureData_RESTAPI* sys = new TreasureData_RESTAPI(&net,"iot_test","sys_info", MBED_CONF_APP_API_KEY); - TreasureData_RESTAPI* sensor = new TreasureData_RESTAPI(&net,"iot_test","sensor_info", MBED_CONF_APP_API_KEY); + printf("\Wifi Example Done,MQTT Example Start\n"); + + // MQTT Example Start + float version = 0.6; + char* publishtopic = "publishtest"; + char* subscribetopic = "subscribtest"; + + logMessage("HelloMQTT: version is %.2f\r\n", version); + NetworkInterface* network = &net; + if (!network) { + return -1; + } - // Device Information Objects - mbed_stats_cpu_t cpuinfo; - mbed_stats_heap_t heapinfo; - mbed_stats_stack_t stackinfo; - mbed_stats_sys_t sysinfo; + MQTTNetwork mqttNetwork(network); + + MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork); - // Buffers to create strings in - char cpu_buff [BUFF_SIZE] = {0}; - char heap_buff [BUFF_SIZE] = {0}; - char stack_buff[BUFF_SIZE] = {0}; - char sys_buff [BUFF_SIZE] = {0}; - char sensor_buff [BUFF_SIZE] = {0}; - - // Initiate sensor variables - float sensor_value_temp = 0; - float sensor_value_humid = 0; - float sensor_value_pressure = 0; + const char* hostname = "192.168.0.120"; + int port = 1883; + logMessage("Connecting to %s:%d\r\n", hostname, port); + int rc = mqttNetwork.connect(hostname, port); + if (rc != 0) + logMessage("rc from TCP connect is %d\r\n", rc); - int16_t pDataXYZ[3] = {0}; - float pGyroDataXYZ[3] = {0}; - - BSP_TSENSOR_Init(); - BSP_HSENSOR_Init(); - BSP_PSENSOR_Init(); - - BSP_MAGNETO_Init(); - BSP_GYRO_Init(); - BSP_ACCELERO_Init(); + MQTTPacket_connectData data = MQTTPacket_connectData_initializer; + data.MQTTVersion = 3; + data.clientID.cstring = "mbed-sample"; + data.username.cstring = "testuser"; + data.password.cstring = "testpassword"; + if ((rc = client.connect(data)) != 0) + logMessage("rc from MQTT connect is %d\r\n", rc); - int x = 0; + if ((rc = client.subscribe(publishtopic, MQTT::QOS2, messageArrived)) != 0) + logMessage("rc from MQTT subscribe is %d\r\n", rc); + if ((rc = client.subscribe(subscribetopic, MQTT::QOS2, messageArrived)) != 0) + logMessage("rc from MQTT subscribe is %d\r\n", rc); + // Get device health data, send to Treasure Data every 10 seconds while(1){ - { - - - // Collect local data - mbed_stats_cpu_get( &cpuinfo); - - // Construct strings to send - x = sprintf(cpu_buff,"{\"uptime\":\"%d\",\"idle_time\":\"%d\",\"sleep_time\":\"%d\",\"deep_sleep_time\":\"%d\"}", - cpuinfo.uptime, - cpuinfo.idle_time, - cpuinfo.sleep_time, - cpuinfo.deep_sleep_time); - cpu_buff[x]=0; // null terminate the string - - // Send data to Treasure data - printf("\r\n Sending CPU Data: '%s'\r\n",cpu_buff); - cpu->sendData(cpu_buff,strlen(cpu_buff)); - } - { - // Collect local data - mbed_stats_heap_get( &heapinfo); - - // Construct strings to send - x=sprintf(heap_buff,"{\"current_size\":\"%d\",\"max_size\":\"%d\",\"total_size\":\"%d\",\"reserved_size\":\"%d\",\"alloc_cnt\":\"%d\",\"alloc_fail_cnt\":\"%d\"}", - heapinfo.current_size, - heapinfo.max_size, - heapinfo.total_size, - heapinfo.reserved_size, - heapinfo.alloc_cnt, - heapinfo.alloc_fail_cnt); - heap_buff[x]=0; // null terminate the string - - // Send data to Treasure data - printf("\r\n Sending Heap Data: '%s'\r\n",heap_buff); - heap->sendData(heap_buff,strlen(heap_buff)); - } - { - // Collect local data - mbed_stats_stack_get( &stackinfo); - - // Construct strings to send - x=sprintf(stack_buff,"{\"thread_id\":\"%d\",\"max_size\":\"%d\",\"reserved_size\":\"%d\",\"stack_cnt\":\"%d\"}", - stackinfo.thread_id, - stackinfo.max_size, - stackinfo.reserved_size, - stackinfo.stack_cnt); - stack_buff[x]=0; // null terminate the string + + printf("\test\n"); + MQTT::Message message; - // Send data to Treasure data - printf("\r\n Sending Stack Data: '%s'\r\n",stack_buff); - stack->sendData(stack_buff,strlen(stack_buff)); - } - { - // Collect local data - mbed_stats_sys_get( &sysinfo); - - // Construct strings to send - x=sprintf(sys_buff,"{\"os_version\":\"%d\",\"cpu_id\":\"%d\",\"compiler_id\":\"%d\",\"compiler_version\":\"%d\"}", - sysinfo.os_version, - sysinfo.cpu_id, - sysinfo.compiler_id, - sysinfo.compiler_version); - sys_buff[x]=0; // null terminate the string + // QoS 0 + char buf[100]; + sprintf(buf, "Hello World! QoS 0 message from app version %f\r\n", version); + message.qos = MQTT::QOS0; + message.retained = false; + message.dup = false; + message.payload = (void*)buf; + message.payloadlen = strlen(buf)+1; + rc = client.publish(publishtopic, message); + client.yield(100); - // Send data to Treasure data - printf("\r\n Sending System Data: '%s'\r\n",sys_buff); - sys->sendData(sys_buff,strlen(sys_buff)); - } - { - sensor_value_temp = BSP_TSENSOR_ReadTemp(); - printf("\nTEMPERATURE = %.2f degC\n", sensor_value_temp); - - sensor_value_humid = BSP_HSENSOR_ReadHumidity(); - printf("HUMIDITY = %.2f %%\n", sensor_value_humid); - - sensor_value_pressure = BSP_PSENSOR_ReadPressure(); - printf("PRESSURE is = %.2f mBar\n", sensor_value_pressure); - -// BSP_MAGNETO_GetXYZ(pDataXYZ); -// printf("\nMAGNETO_X = %d\n", pDataXYZ[0]); -// printf("MAGNETO_Y = %d\n", pDataXYZ[1]); -// printf("MAGNETO_Z = %d\n", pDataXYZ[2]); -// -// BSP_GYRO_GetXYZ(pGyroDataXYZ); -// printf("\nGYRO_X = %.2f\n", pGyroDataXYZ[0]); -// printf("GYRO_Y = %.2f\n", pGyroDataXYZ[1]); -// printf("GYRO_Z = %.2f\n", pGyroDataXYZ[2]); -// -// BSP_ACCELERO_AccGetXYZ(pDataXYZ); -// printf("\nACCELERO_X = %d\n", pDataXYZ[0]); -// printf("ACCELERO_Y = %d\n", pDataXYZ[1]); -// printf("ACCELERO_Z = %d\n", pDataXYZ[2]); - - // Construct strings to send - x=sprintf(sensor_buff,"{\"temperature\":\"%f\",\"humidity\":\"%f\",\"pressure\":\"%f\"}", - sensor_value_temp, - sensor_value_humid, - sensor_value_pressure - ); - sensor_buff[x]=0; // null terminate the string - - // Send data to Treasure data - printf("\r\n Sending System Data: '%s'\r\n",sensor_buff); - sensor->sendData(sensor_buff,strlen(sensor_buff)); - - } - wait(10); + + //int x = 0; + wait(1); } - net.disconnect(); - - printf("\nDone, x=%d\n",x); - + // net.disconnect(); }