/** * @brief Begin connect to MQTT broker * @param client: MQTT_Client reference * @retval None */ void ICACHE_FLASH_ATTR MQTT_Connect(MQTT_Client *mqttClient) { if (mqttClient->pCon) { // Clean up the old connection forcefully - using MQTT_Disconnect // does not actually release the old connection until the // disconnection callback is invoked. mqtt_tcpclient_delete(mqttClient); } mqttClient->pCon = (struct espconn *)os_zalloc(sizeof(struct espconn)); mqttClient->pCon->type = ESPCONN_TCP; mqttClient->pCon->state = ESPCONN_NONE; mqttClient->pCon->proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp)); mqttClient->pCon->proto.tcp->local_port = espconn_port(); mqttClient->pCon->proto.tcp->remote_port = mqttClient->port; mqttClient->pCon->reverse = mqttClient; espconn_regist_connectcb(mqttClient->pCon, mqtt_tcpclient_connect_cb); espconn_regist_reconcb(mqttClient->pCon, mqtt_tcpclient_recon_cb); mqttClient->keepAliveTick = 0; mqttClient->reconnectTick = 0; os_timer_disarm(&mqttClient->mqttTimer); os_timer_setfn(&mqttClient->mqttTimer, (os_timer_func_t *)mqtt_timer, mqttClient); os_timer_arm(&mqttClient->mqttTimer, 1000, 1); if (UTILS_StrToIP(mqttClient->host, &mqttClient->pCon->proto.tcp->remote_ip)) { MQTT_INFO("TCP: Connect to ip %s:%d\r\n", mqttClient->host, mqttClient->port); if (mqttClient->security) { #ifdef MQTT_SSL_ENABLE espconn_secure_set_size(ESPCONN_CLIENT, MQTT_SSL_SIZE); espconn_secure_connect(mqttClient->pCon); #else MQTT_INFO("TCP: Do not support SSL\r\n"); #endif } else { espconn_connect(mqttClient->pCon); } } else { MQTT_INFO("TCP: Connect to domain %s:%d\r\n", mqttClient->host, mqttClient->port); espconn_gethostbyname(mqttClient->pCon, mqttClient->host, &mqttClient->ip, mqtt_dns_found); } mqttClient->connState = TCP_CONNECTING; }
/****************************************************************************** * FunctionName : user_init * Description : entry of user application, init user function here * Parameters : none * Returns : none *******************************************************************************/ void user_init(void) { uart_init(115200, 115200); // serial bound rate:11520. //long press gpio4, enter into wifi config mode. peri_single_key_init(4, user_key_long_press_cb, peri_key_short_press); // add you object init here. led_object_init(); //c_motor_object_init(); //temperature_object_init(); espconn_secure_set_size(ESPCONN_CLIENT,5120); pando_framework_init(); }
LOCAL void ICACHE_FLASH_ATTR mqtt_dns_found(const char *name, ip_addr_t *ipaddr, void *arg) { struct espconn *pConn = (struct espconn *)arg; MQTT_Client* client = (MQTT_Client *)pConn->reverse; if (ipaddr == NULL) { MQTT_INFO("DNS: Found, but got no ip, try to reconnect\r\n"); client->connState = TCP_RECONNECT_REQ; return; } MQTT_INFO("DNS: found ip %d.%d.%d.%d\n", *((uint8 *) &ipaddr->addr), *((uint8 *) &ipaddr->addr + 1), *((uint8 *) &ipaddr->addr + 2), *((uint8 *) &ipaddr->addr + 3)); if (client->ip.addr == 0 && ipaddr->addr != 0) { os_memcpy(client->pCon->proto.tcp->remote_ip, &ipaddr->addr, 4); if (client->security) { #ifdef MQTT_SSL_ENABLE espconn_secure_set_size(ESPCONN_CLIENT, MQTT_SSL_SIZE); espconn_secure_connect(client->pCon); #else MQTT_INFO("TCP: Do not support SSL\r\n"); #endif } else { espconn_connect(client->pCon); } client->connState = TCP_CONNECTING; MQTT_INFO("TCP: connecting...\r\n"); } system_os_post(MQTT_TASK_PRIO, 0, (os_param_t)client); }
static void ICACHE_FLASH_ATTR dns_callback(const char * hostname, ip_addr_t * addr, void * arg) { request_args * req = (request_args *)arg; if (addr == NULL) { os_printf("DNS failed for %s\n", hostname); if (req->user_callback != NULL) { req->user_callback("", -1, ""); } os_free(req); } else { PRINTF("DNS found %s " IPSTR "\n", hostname, IP2STR(addr)); struct espconn * conn = (struct espconn *)os_malloc(sizeof(struct espconn)); conn->type = ESPCONN_TCP; conn->state = ESPCONN_NONE; conn->proto.tcp = (esp_tcp *)os_malloc(sizeof(esp_tcp)); conn->proto.tcp->local_port = espconn_port(); conn->proto.tcp->remote_port = req->port; conn->reverse = req; os_memcpy(conn->proto.tcp->remote_ip, addr, 4); espconn_regist_connectcb(conn, connect_callback); espconn_regist_disconcb(conn, disconnect_callback); espconn_regist_reconcb(conn, error_callback); if (req->secure) { espconn_secure_set_size(ESPCONN_CLIENT,5120); // set SSL buffer size espconn_secure_connect(conn); } else { espconn_connect(conn); } } }