学习笔记-8MQTT-韦东山

54~62

一,platform_net_socket.c

二,

#include "nettype_tcp.h"的四个函数分别包含如下四个函数

platform_net_socket_recv_timeout收包

platform_net_socket_write_timeout发包

platform_net_socket_connect网络连接

platform_net_socket_close关闭连接

三,指定IP,不能指定域名

对于域名:向域名服务器发送域名,得到IP

AT+CWJAP="SSID","password"

err=ATSendCmd("AT+CWJAP=\""SSID"\",\""password"\"",NULL,0,2000);

四,使用宏,来实现函数

该文件在mqttClient.h里声明

该文件在mqttClient.c里实现

MQTT_ROBUSTNESS_CHECK做某个检查

/*client->mqtt_port="1883"*/

/*并且返回client->mqtt_port*/

mqtt_set_port(client, "1883");

五,

/*设置Client结构体里的*mqtt_host;(字符串)指针指向某IP/域名*/

mqtt_set_host(client, "www.jiejie01.top"); //ky设置IP(设置host成一个网址)

通过路由器 连接 服务器

六,\"表示"

七,断开TCP连接

AT+CIPCLOSE

八,发:AT+CIPSEND=4,要收到:>才算成功

发送AT命令时,把命令记录下来

九,单片机 服务器 手机

中断:读串口数据,写入环形缓冲区

解析线程:从环形缓冲区中读

ProcessSpecialATString(buf):把解析后的真正的数据 放入 环形缓冲区

platform_net_socket_recv_timeout:读

以前实现ATReadPacket,把数据整个拷贝过去

现在发现 别人上层读时,可能只读一个byte

把ATReadPacket换成ATReadData

臃肿的代码:

int ATReadData(char *c,int timeout)

{

int ret;

/*环形缓冲区有数据,读到*c后直接返回*/

if(0==ring_buffer_read((unsigned char *)c,&g_packet_buffer)) //100ask add

return AT_OK;

/*环形缓冲区无数据,阻塞*/

else

{

/*成功:返回pdTRUE;超时:返回pdFALSE*/

ret=platform_mutex_lock_timeout(&at_packet_mutex,timeout);

/*返回pdTRUE,可以再去读一次*/

if(pdFALSE==ret)

{

return AT_TIMEOUT;

}

else if(pdTRUE==ret)

{

ring_buffer_read((unsigned char *)c,&g_packet_buffer);

}

}

}

do...while优化后:

第一种:直接读出一个字符return AT_OK

第二种:停超过timeout毫秒,超时退出return AT_TIMEOUT

第三种:timeout毫秒内开锁,第二遍读出一个字符return AT_OK

int ATReadData(char *c,int timeout)

{

int ret;

do{

/*环形缓冲区有数据,读到*c后直接返回*/

if(0==ring_buffer_read((unsigned char *)c,&g_packet_buffer)) //100ask add

return AT_OK;

/*环形缓冲区无数据*/

else

{

/*成功:返回pdTRUE;超时:返回pdFALSE*/

ret=platform_mutex_lock_timeout(&at_packet_mutex,timeout);

/*返回pdTRUE,可以再去读一次*/

if(pdFALSE==ret)

{

return AT_TIMEOUT;

}

}

}while (ret)

}

十,printf本身写错了

Error: L6218E: Undefined symbol ptintf (referred from platform_net_socket.o).

错误:L6218E:未定义的符号ptintf(从platform_net_socket.o引用)

十一,32位单片机中 int buf[3];

buf[2]和*(buf+2)一样

(buf+1)和&buf[1]指向同一个内

十二,/*链接服务器*/

mqtt_connect(client);

static int mqtt_connect_with_results(mqtt_client_t* c)

{

if (CLIENT_STATE_CONNECTED == mqtt_get_client_state(c))

RETURN_ERROR(MQTT_SUCCESS_ERROR);//ky如果链接成功,返回0

}

RETURN_ERROR 是 return

MQTT_SUCCESS_ERROR 是 0 成功

MQTT_FAILED_ERROR 是 -0x0001 失败

十三,有问题的mosquitto链接

D:\ mosquito to MQTT\ mosquito to>.\ mosquito .exe

1740039973:蚊版本2.0.14启动

1740039973:使用默认配置。

1740039973:以本地模式启动。只有在这台机器上运行的客户端才能进行连接

1740039973:创建一个配置文件,定义一个监听器来允许远程访问。

1740039973:详细信息请参见https://mosquitto.org/documentation/authentication-methods/

1740039973:在端口1883上打开ipv4侦听套接字。

1740039973:在1883端口上打开ipv6监听套接字。

1740039973:蚊到2.0.14版本运行

十四,需要提供一个配置文件,正确的mosquitto链接

开启Mosquitto服务以后出现local only mode 的情况

解决:

1,

找到listener的配置,将#删除再在listener后面加一个固定的端口1883。

这个文件里的listener可能比较多,

找到#listener port-number [ip address/host name/unix socket path]这句后面的那个listener。

2,

然后找到allow_anonymous false,将false修改为true。 是true 不是ture

然后启动Mosquitto服务的时候使用配置文件启动

这样启动D:\mosquitto MQTT\mosquitto>mosquitto.exe -c mosquitto.conf -v

D:\ mosquito to MQTT\ mosquito to> mosquito .exe -c mosquito .conf -v

1740039599:蚊版本2.0.14启动

1740039599:从mosquito .conf加载配置。

1740039599:在1883端口上打开ipv6监听套接字。

1740039599:在端口1883上打开ipv4侦听套接字。

1740039599:蚊到2.0.14版本运行

如果还出现local only mode ,则MQTT服务就只能在一台主机上进行,别的客户端想要连到MQTT服务器进行MQTT通信是不行的

十五**,启动,订阅,发布**

mosquitto 启动

mosquitto_sub -t 'test/topic' -v 订阅

mosquitto_pub -t 'test/topic' -m 'hello world' 发布

相关推荐
8K超高清11 小时前
中国8K摄像机:科技赋能文化传承新图景
大数据·人工智能·科技·物联网·智能硬件
weixin_5088216512 小时前
1ms软延时,不用定时器,stm32
stm32·单片机·嵌入式硬件
weixin_5088216513 小时前
stm32 主频216MHz,写个ms延时函数,us延时函数
stm32·单片机·嵌入式硬件
华清远见IT开放实验室13 小时前
【新书上市】《STM32嵌入式系统开发—基于STM32CubeMX和HAL库》,高校教学推荐,STM32入门必读书籍!
stm32·单片机·嵌入式硬件·虚拟仿真·必读书籍·高校教学
niuTaylor17 小时前
STM32平衡车开发实战教程:从零基础到项目精通
stm32·单片机·嵌入式硬件
TDengine (老段)1 天前
TDengine 中的关联查询
大数据·javascript·网络·物联网·时序数据库·tdengine·iotdb
可待电子单片机设计定制(论文)1 天前
【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)
stm32·单片机·嵌入式硬件
古希腊掌握嵌入式的神1 天前
[物联网iot]对比WIFI、MQTT、TCP、UDP通信协议
网络·物联网·网络协议·tcp/ip·udp
了一li1 天前
STM32实现一个简单电灯
stm32·单片机·嵌入式硬件
可待电子单片机设计定制(论文)1 天前
【STM32设计】数控直流稳压电源的设计与实现(实物+资料+论文)
stm32·嵌入式硬件·mongodb