Appearance
连接到wif
在文件platform里面还没有进行实现
现在使用的链接方式的esp8266模块, 和32通信的方式是串口, 所以需要一个串口进行通信
[ESP8266 Non-OS AT 指令使用示例_V1.3.pdf](file:///E:/a学习/15-嵌入式/doc_and_source_for_projects/00_开发板配套资料/ESP8266-01S模块资料/01_技术手册/01_乐鑫(espressif)/ESP8266 Non-OS AT 指令使用示例_V1.3.pdf)
这个文件里面有对应的命令
AT =>测试连接
AT+CWMODE=3 =>设置模式可以连接和被连接
AT+CWJAP="jiao","1234567890" => 连接路由器
AT+CIFSR => 查ip
AT+CIPSTART="TCP","192.168.78.165",777 => 连接服务器
AT+CIPSEND=4 => 发送四个字节的数据, 之后再输入四个字节就可以了
AT+CIPCLOSE => 断开连接

也可以使用服务器向8266发送数据, 之后8266会显示接收到的数据
+IPD,15:www.100ask.com
- 出现
busy p...
在发送的时候不要发送多余的换行符
数据格式
数据发送成功的时候会返回一个OK, 失败的话会返回一个ERROR
如果接收到数据会发送一个+IPD,15:www.100ask.com
格式的数据
接收到数据产生中断需要保存数据
之后需要处理数据
- 实现
用一个发送命令的函数, 之后接受串口的数据, 检查返回的是REEOR还是OK
有一个环形缓冲区进行保存数据
- 使用死等的方式进行发送数据
在写入的时候等代标志位, 使用死循环的方式
- 使用中断
一般使用memcpy把buf复制到另一个buf里面, 之后启动一个中断, 在中断里面发送数据
- 处理开始的时候产生中断
在是使能中断的时候清除中断位
实现命令参考RT-Thread
思路
实现两个线程
- 线程一
发送命令at_obj_exec_cmd
等待回应进入阻塞rt_sem_take
- 线程二
解析数据的线程client_parser
这个会读串口, 检测返回的是不是OK或者ERROR之类的, 是的话返回对应的返回值
这时候读会使用函数at_recv_readline函数, 在里面进行一个行的获取, 并进行处理
会使用一个urc_table保存要处理的数据的类型, 前缀和后缀收到以后用对应的函数进行处理, 在收到一个换行, 特殊的标志位或者上面的格式的时候会表示收到了一行新的数据
可以使用函数strstr(), 会返回某一个字符串里面是否有另一个字符串, 有的话返回第一次出现的位置
问题
在中断里面使用锁相关函数需要使用FromIRQ的函数
中断优先级不能太高
在中断中不能使用互斥量
网络相关
c
int platform_net_socket_connect(const char *host, const char *port, int proto)
{
return 0;
}
int platform_net_socket_recv_timeout(int fd, unsigned char *buf, int len, int timeout)
{
return 0;
}
int platform_net_socket_write_timeout(int fd, unsigned char *buf, int len, int timeout)
{
return 0;
}
int platform_net_socket_close(int fd)
{
return 0;
}
需要实现这几个函数
电脑做服务器
在mosquitto.exe的配置文件里面加上
c
allow_anonymous true
listener 1883
最后执行
bash
mosquitto.exe -c mosquitto.conf -v