Skip to content

连接到wif

在文件platform里面还没有进行实现

image-20231126210236900

现在使用的链接方式的esp8266模块, 和32通信的方式是串口, 所以需要一个串口进行通信

image-20231126210609479

[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 => 断开连接
image-20231127162950575

image-20240113133713909

也可以使用服务器向8266发送数据, 之后8266会显示接收到的数据+IPD,15:www.100ask.com

  • 出现busy p...

在发送的时候不要发送多余的换行符

数据格式

数据发送成功的时候会返回一个OK, 失败的话会返回一个ERROR

如果接收到数据会发送一个+IPD,15:www.100ask.com格式的数据

接收到数据产生中断需要保存数据

之后需要处理数据

  • 实现

用一个发送命令的函数, 之后接受串口的数据, 检查返回的是REEOR还是OK

有一个环形缓冲区进行保存数据

  1. 使用死等的方式进行发送数据

在写入的时候等代标志位, 使用死循环的方式

  1. 使用中断

一般使用memcpy把buf复制到另一个buf里面, 之后启动一个中断, 在中断里面发送数据

image-20231202094135910

image-20231202110926963

image-20231202111015489

  • 处理开始的时候产生中断

在是使能中断的时候清除中断位

实现命令参考RT-Thread

思路

实现两个线程

  • 线程一

发送命令at_obj_exec_cmd

等待回应进入阻塞rt_sem_take

  • 线程二

解析数据的线程client_parser

这个会读串口, 检测返回的是不是OK或者ERROR之类的, 是的话返回对应的返回值

这时候读会使用函数at_recv_readline函数, 在里面进行一个行的获取, 并进行处理

image-20231203105728745

会使用一个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