static void prvMQTTEchoTask(void *pvParameters) { /* connect to m2m.eclipse.org, subscribe to a topic, send and receive messages regularly every 1 sec */ MQTTClient client; Network network; unsigned char sendbuf[80], readbuf[80]; int rc = 0, count = 0; MQTTPacket_connectData connectData = MQTTPacket_connectData_initializer; pvParameters = 0; platform_network_init(&network); MQTTClientInit(&client, &network, 30000, sendbuf, sizeof(sendbuf), readbuf, sizeof(readbuf)); char* address = "iot.eclipse.org"; if ((rc = platform_network_connect(&network, address, 1883)) != 0) printf("Return code from network connect is %d\n", rc); #if defined(MQTT_TASK) if ((rc = MQTTStartTask(&client)) != pdPASS) printf("Return code from start tasks is %d\n", rc); #endif connectData.MQTTVersion = 3; connectData.clientID.cstring = "FreeRTOS_sample"; if ((rc = MQTTConnect(&client, &connectData)) != 0) printf("Return code from MQTT connect is %d\n", rc); else printf("MQTT Connected\n"); if ((rc = MQTTSubscribe(&client, "FreeRTOS/sample/#", 2, messageArrived)) != 0) printf("Return code from MQTT subscribe is %d\n", rc); while (++count) { MQTTMessage message; char payload[30]; message.qos = 1; message.retained = 0; message.payload = payload; sprintf(payload, "message number %d", count); message.payloadlen = strlen(payload); if ((rc = MQTTPublish(&client, "FreeRTOS/sample/a", &message)) != 0) printf("Return code from MQTT publish is %d\n", rc); #if !defined(MQTT_TASK) if ((rc = MQTTYield(&client, 1000)) != 0) printf("Return code from yield is %d\n", rc); #endif } /* do not return */ }
static void mqtt_client_thread(void *pvParameters) { char *payload = NULL; MQTTClient client; Network network; int rc = 0; char clientID[32] = {0}; uint32_t count = 0; ESP_LOGI(TAG, "ssid:%s passwd:%s sub:%s qos:%u pub:%s qos:%u pubinterval:%u payloadsize:%u", CONFIG_WIFI_SSID, CONFIG_WIFI_PASSWORD, CONFIG_MQTT_SUB_TOPIC, CONFIG_DEFAULT_MQTT_SUB_QOS, CONFIG_MQTT_PUB_TOPIC, CONFIG_DEFAULT_MQTT_PUB_QOS, CONFIG_MQTT_PUBLISH_INTERVAL, CONFIG_MQTT_PAYLOAD_BUFFER); ESP_LOGI(TAG, "ver:%u clientID:%s keepalive:%d username:%s passwd:%s session:%d level:%u", CONFIG_DEFAULT_MQTT_VERSION, CONFIG_MQTT_CLIENT_ID, CONFIG_MQTT_KEEP_ALIVE, CONFIG_MQTT_USERNAME, CONFIG_MQTT_PASSWORD, CONFIG_DEFAULT_MQTT_SESSION, CONFIG_DEFAULT_MQTT_SECURITY); ESP_LOGI(TAG, "broker:%s port:%u", CONFIG_MQTT_BROKER, CONFIG_MQTT_PORT); ESP_LOGI(TAG, "sendbuf:%u recvbuf:%u sendcycle:%u recvcycle:%u", CONFIG_MQTT_SEND_BUFFER, CONFIG_MQTT_RECV_BUFFER, CONFIG_MQTT_SEND_CYCLE, CONFIG_MQTT_RECV_CYCLE); MQTTPacket_connectData connectData = MQTTPacket_connectData_initializer; NetworkInit(&network); if (MQTTClientInit(&client, &network, 0, NULL, 0, NULL, 0) == false) { ESP_LOGE(TAG, "mqtt init err"); vTaskDelete(NULL); } payload = malloc(CONFIG_MQTT_PAYLOAD_BUFFER); if (!payload) { ESP_LOGE(TAG, "mqtt malloc err"); } else { memset(payload, 0x0, CONFIG_MQTT_PAYLOAD_BUFFER); } for (;;) { ESP_LOGI(TAG, "wait wifi connect..."); xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, false, true, portMAX_DELAY); if ((rc = NetworkConnect(&network, CONFIG_MQTT_BROKER, CONFIG_MQTT_PORT)) != 0) { ESP_LOGE(TAG, "Return code from network connect is %d", rc); continue; } connectData.MQTTVersion = CONFIG_DEFAULT_MQTT_VERSION; sprintf(clientID, "%s_%u", CONFIG_MQTT_CLIENT_ID, esp_random()); connectData.clientID.cstring = clientID; connectData.keepAliveInterval = CONFIG_MQTT_KEEP_ALIVE; connectData.username.cstring = CONFIG_MQTT_USERNAME; connectData.password.cstring = CONFIG_MQTT_PASSWORD; connectData.cleansession = CONFIG_DEFAULT_MQTT_SESSION; ESP_LOGI(TAG, "MQTT Connecting"); if ((rc = MQTTConnect(&client, &connectData)) != 0) { ESP_LOGE(TAG, "Return code from MQTT connect is %d", rc); network.disconnect(&network); continue; } ESP_LOGI(TAG, "MQTT Connected"); #if defined(MQTT_TASK) if ((rc = MQTTStartTask(&client)) != pdPASS) { ESP_LOGE(TAG, "Return code from start tasks is %d", rc); } else { ESP_LOGI(TAG, "Use MQTTStartTask"); } #endif if ((rc = MQTTSubscribe(&client, CONFIG_MQTT_SUB_TOPIC, CONFIG_DEFAULT_MQTT_SUB_QOS, messageArrived)) != 0) { ESP_LOGE(TAG, "Return code from MQTT subscribe is %d", rc); network.disconnect(&network); continue; } ESP_LOGI(TAG, "MQTT subscribe to topic %s OK", CONFIG_MQTT_SUB_TOPIC); for (;;) { MQTTMessage message; message.qos = CONFIG_DEFAULT_MQTT_PUB_QOS; message.retained = 0; message.payload = payload; sprintf(payload, "message number %d", ++count); message.payloadlen = strlen(payload); if ((rc = MQTTPublish(&client, CONFIG_MQTT_PUB_TOPIC, &message)) != 0) { ESP_LOGE(TAG, "Return code from MQTT publish is %d", rc); } else { ESP_LOGI(TAG, "MQTT published topic %s, len:%u heap:%u", CONFIG_MQTT_PUB_TOPIC, message.payloadlen, esp_get_free_heap_size()); } if (rc != 0) { break; } vTaskDelay(CONFIG_MQTT_PUBLISH_INTERVAL / portTICK_RATE_MS); } network.disconnect(&network); } ESP_LOGW(TAG, "mqtt_client_thread going to be deleted"); vTaskDelete(NULL); return; }