首先是搭建好库,我搭建的方法是这样的:
1.把driver_lib文件夹改成app。
2.把examples文件夹里的IoT_Demo文件夹里的所有复制到app文件夹下,并且覆盖。
3.把examples文件夹下的esp_mqtt_proj文件夹里的内容全部复制到app文件夹下,并且覆盖。
4.把examples文件夹和third_party文件夹删除。
5.app文件夹下user文件夹里就留一个user_main.c和Makefile文件。
这样就完成了,然后我们把他导入开发平台,编译下没有问题。
接下来就是配置问题了,我参考了一位大哥的博客,大家去看他的博客就行:mqtt配置
然后就是写定时发送mqtt的函数了,这里实现5秒发送一次到mqtt,发送的是hello。
主函数部分:
void user_init(void)
{
uart_init(74880, 74880);
os_delay_us(60000);
CFG_Load();
MQTT_InitConnection(&mqttClient, sysCfg.mqtt_host, sysCfg.mqtt_port, sysCfg.security);
//MQTT_InitConnection(&mqttClient, "192.168.11.122", 1880, 0);
MQTT_InitClient(&mqttClient, sysCfg.device_id, sysCfg.mqtt_user, sysCfg.mqtt_pass, sysCfg.mqtt_keepalive, 1);
//MQTT_InitClient(&mqttClient, "client_id", "user", "pass", 120, 1);
MQTT_InitLWT(&mqttClient, "/lwt", "offline", 0, 0);
MQTT_OnConnected(&mqttClient, mqttConnectedCb);
MQTT_OnDisconnected(&mqttClient, mqttDisconnectedCb);
//注意屏蔽这句话
//MQTT_OnPublished(&mqttClient, mqttPublishedCb);
MQTT_OnData(&mqttClient, mqttDataCb);
WIFI_Connect(sysCfg.sta_ssid, sysCfg.sta_pwd, wifiConnectCb);
INFO("\r\nSystem started ...\r\n");
/** 关闭该定时器 */
os_timer_disarm( &os_timer );
/** 配置该定时器回调函数 */
os_timer_setfn( &os_timer, (ETSTimerFunc *) ( Task_Run ), NULL );
/** 启动该定时器 */
os_timer_arm( &os_timer, 1000, true );
}
循环函数部分:
void Task_Run(void)
{
static uint16 i;
i++;
if(i>=4)
{
i=0;
MQTT_Publish(&mqttClient, "/mqtt/topic/0", "hello", 6, 0, 0);
os_printf("hello\n");
}
}
实验结果:
说说遇到的问题:这里一定要屏蔽MQTT_OnPublished(&mqttClient, mqttPublishedCb)这句话,或者别调用它,发送直接用这句话MQTT_Publish(&mqttClient, “/mqtt/topic/0”, “hello”, 6, 0, 0);别用那个回调函数,试过不管用。然后如果有上面那句话,就会出现一直发送数据不能让他停止,而且发送的很快。
下面我把移植好的程序,和我最终实现的程序放在网盘:
链接:https://pan.baidu.com/s/1bpXk4BSLf7bX1B_CHAhzzQ
提取码:gv4p