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