学习笔记-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 buf3;

buf2和*(buf+2)一样

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

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

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' 发布

相关推荐
国产化创客3 小时前
ESP32 CameraWebServer 原生摄像头项目全解析
物联网·开源·嵌入式·实时音视频·智能硬件
谁似人间西林客3 小时前
数据智能怎么赋能工业制造?物联网场景落地方法解析
物联网·制造
牛根生同志4 小时前
SPI数据收发的时候 TXE与RXNE标志位置位的时机
stm32·spi·transfer
InHand云飞小白4 小时前
无人值守站点网络困境?工业级路由器IR315破解连接难题
网络·物联网·4g·工业路由器·4g路由器·iiot·蜂窝路由器
MetrixAeroCore4 小时前
Metrix 国际物联网卡资费方案|多场景共享流量池·按需扩容
物联网
goldenrolan5 小时前
学习型红外控制系统稳定性挂测工装专项总结
软件测试·python·stm32·嵌入式·红外
by————组态6 小时前
Ricon组态系统 - 新一代Web可视化组态平台
前端·后端·物联网·架构·组态·组态软件
王二端茶倒水7 小时前
智慧园区网络运营:认证、分权、运维和安全闭环
运维·物联网·架构
CC城子7 小时前
STM32H7_FDCAN 驱动笔记
stm32·can·canfd
意法半导体STM328 小时前
【官方原创】如何为STM32CubeMX2配置Visual Studio Code配置方案
vscode·stm32·单片机·嵌入式硬件·策略模式·stm32cubemx·嵌入式开发