从长计议 发表于 2015-11-13 09:57:06

WIFI模块ESP8266驱动

本帖最后由 从长计议 于 2015-11-13 09:59 编辑

   Esp8266是wifi模块可以做为路由器和站点连网。接口为UART,波特率115200。可以用在对速度要求比较低的场合。

在智龙V2板上有四个UART口,分别为UART0-3。取UART1,与GPIO2和GPIO3复用。GPIO3-UART1_TXD接ESP8266-RXD; GPIO2-UART1-RXD接ESP8266-TXD。
ESP8266电流输大,需要单独3v电源,不能使用智龙V2板上的3.3v电源。


驱动开发主要是对UART串口的读写。从全局变量console_drivers得到uart_driver并得到所有串口port,取串口1,直接对串口寄存器映射的内存操作。 为了较好的性能,串口发送第0个字节由程序直接发出,然后进入休眠状态。从1开始的字节由中断服务程序在前一个字节发送后逐一发出,直接全部数据发送完成再唤醒发送程序,大大减少CPU的占用。UART的接收由中断程序每次接收一个字节放在缓存中。应用程序可以批量读取。
   为了保证收发不丢失任何一个字节,又尽量少占内存,建立了一个缓存双向链表。链表每个结点都是1k大小。中断程序收到数据放在链表尾的结点,结点缓存满了后再申请一块内存缓存放在链表尾。应用程序读取从链表头开始从前往后读,当一个缓存结点全部读取后释放这个结点的内存。

串口调通后可以使用AT命令控制esp8266查询WIFI路由,连接WIFI路由,建立TCP/IP连接,收发数据。

模块安装#insmod esp8266.ko
在/sys/devices/platform/esp8266.o目录中,写入atwrite为发送uart AT命令,读取atread为接收esp8266通过uart返回。


列出路由,查看listap
连接路由比如whatname,输入whatname和密码
连接TCP,比如连接sohu网站,输入网站域名和端口
echo www.sohu.com 80 >/sys/devices/platform/esp8266.0/tcpconnect
发送一个简单的http请求
printf "GET / HTTP/1.1\r\nHost: www.sohu.com\r\n\r\n" > /sys/devices/platform/esp8266.0/tcpsend

发送成功后能接收到网站回应,由http头知道是gzip格式。


程序:在lslc/platform.c中加入esp8266_device
Makefile为
obj-m := esp8266.o
单独编译
make -C内核路径M=`pwd` modules

生成esp8266.ko,用insmod esp8266.ko安装

简单平安 发表于 2015-11-13 17:18:07

赞!

sn2015ol 发表于 2015-12-26 03:05:05

非常好

ratking 发表于 2015-12-26 21:27:30

感谢楼主分享!

zzforce 发表于 2016-4-5 13:25:15

页: [1]
查看完整版本: WIFI模块ESP8266驱动