RT-Thread:RW007-连接WIFI

目录

提示:大家不要因为篇幅较长感觉害怕,下面大部分是操作过程中可能遇到的问题分析,如果你没遇到都是可以直接跳过。

1、学习RW007原因
2、RW007简介和优缺点
3、硬件准备
4、软件准备
5、使用env进行工程裁剪和配置
6、更新、修改、编译和下载工程源码
7、命令行控制RW007
8、总结

1、学习RW007原因:

RT-Thread是国产开源的系统,本人比较青睐这个系统,因为他是国产开源系统,风格有点类似linux,有很多有趣的组件和软件包,大多都是面向物联网的,比如:文件系统、网卡、套接字、Web软件包、OneNet软件包、MQTT软件包、阿里云软件包、Azure云平台软件包,甚至支持MicroPython,Openmv等等。这些功能看似很高级特别难,其实用起来很简单,因为他是运行在RT-thread之上的,很多只要动动手指就可以开启使用,这是普通的嵌入式系统是无法做到的,所以为了能够把这些软件包用起来,第一步我就需要把官方的RW007 WIFI模块搞定。>>前往官网


2、RW007简介和优缺点:

RW007模块上海睿赛德电子科技有限公司推出的WIFI模块,可以通过RT-Thread操作系统轻松接入网络,模块通讯方式:UART或SPI。

通讯 UART SPI
优点 1、使用AT指令控制,程序体积小且简单,占用RAM少;2、只需要2根通讯线即可; 1、可以同时和多个服务器建立连接,数量和单片机ROM、RAM有关 ;2、在网络环境通畅且带宽足够情况下,通讯速度快;
缺点 1、与服务器建立的连接数有限;2、在网络环境通畅且带宽足够情况下,通讯速度慢; 1、代码庞大且复杂,占用RAM较多;2、通讯控制线至少需要6根;
原因 1、模块内部运行RT-Thread操作系统和TCP/IP协议栈,已经占用大部分RAM,模块每和服务器建立一条连接都需要开辟一部分RAM,剩余的RAM不足以建立过多连接;2、单片机与服务器进行通讯,数据需要通过模块进行处理和中转,这个过程需要时间;3、UART通讯速度低; 1、模块内部无操作系统和TCP/IP协议栈,单片机和服务器通讯时需要单片机内置TCP/IP协议栈,所以和服务器能建立的连接数由单片机ROM和RAM决定;2、使用SPI通讯速度较快;

3、硬件准备:

1、最小系统板:STM32F407xxxx为主控芯片都可以,本人使用STM32F407ZGT6,要求板中PA5、PA6、PA7引脚未被占用且能向外提供3.3v电压即可。
2、RW007 WIFI模块

硬件连接:

RT-Thread:RW007-连接WIFI_第1张图片
注意:
这里硬件连接是一个坑,第一:最好按照我这个接法,按照官方接法就会导致调试串口无法正常使用,需要正常使用必须还要修调试串口号。第二:必须连接3.3v给模块供电,连接5v没有作用的。上电后模块上蓝色灯在闪烁。如果没有闪烁,有以下可能:
1、模块未得到正确且稳定的3.3v供电;
2、模块未烧写固件,这个需要联系卖家,提供固件以及烧写说明文档。本人在这里被坑了将近2个星期,我一直在查找我的程序和硬件连接问题,最终多亏了一位群友KeepOnGoing帮忙才发现是没有烧写固件导致的,虽然本人现在有固件但卖家要求不可外传,所以不贴出来了。


4、软件准备:

1、开发环境准备:Keil4或keil5(注册机要自己在其他地方下载)。
>>前往下载keil5
作用:进行查看、编写、编译源代码。

2、安装STM32F4系列芯片支持包:Keil.STM32F4xx_DFP.1.0.8。>>前往下载
作用:有了芯片支持包才可以有正常进行编译,才支持对芯片进行编程(个人理解,有大佬知道正确作用,欢迎指正纠错)。

3、安装ST-Link驱动。>>前往下载
作用: ST-Link仿真器的驱动。

4、下载RT-Thread工程:rt-thread-v4.0.2。>>前往下载
作用:这个是官方提供基于各种开发板的工程,我们使用这里面的工程来开发我们的项目。

5、安装git和RT-Thread工程配置软件env。>>前往下载git
>>前往下载env
>>进入Git和env视频教程
作用:安装 git才能正常使用env,使用env对RT-Thread工程进行裁剪和配置出自己想要的功能。。

6、安装调试软件:Xshell。>>前往下载,具体安装大家可以在网上搜索,很简单的。
作用:类似Windows的cmd,其实就是类似一个串口助手,用这个软件通过串口对单片机进行控制,所以使用普通的串口助手也是可以进行发送命令控制的,为什么推荐用Xshell,下文会具体讲到。


5、使用env进行工程裁剪和配置

1、解压rt-thread-v4.0.2压缩包,得到rt-thread文件夹
2、打开rt-thread的bsp文件夹下就是基于各种类型芯片的开发板工程,我们打开rt-thread\bsp\stm32\stm32f407-atk-explorer,这个是探索者开发板的工程。

注意:大家不要着急打开工程,就算打开工程也不要进行编译,有可能会编译出错,或者有可能会导致后面配置好的工程编译会出错。
RT-Thread:RW007-连接WIFI_第2张图片
3、在这个界面空白处单击鼠标右键点击ConEmu Here打开env。
RT-Thread:RW007-连接WIFI_第3张图片

注意:
env这个小黑窗口尺寸不能将其改小,改小后将会影响后面menuconfig无法打开。

4、在env内输入menuconfig然后回车进入工程配置界面
RT-Thread:RW007-连接WIFI_第4张图片

操作按键:
按键 ↑↓ ← → Enter 空格 Esc
功能 列表选择 菜单选择 确认 选中/取消 后退

5、进入目录Hardware Drivers Config --->On-chip Peripheral Drivers,空格 选中 SPI BUS --->,回车进入SPI BUS,空格选中Enable SPI1 BUS
RT-Thread:RW007-连接WIFI_第5张图片
6、开启并配置 RW007 软件包
进入目录RT-Thread online packages --->IoT - internet of things --->Wi-Fi --->,选中 rw007: SPI WIFI rw007 driver --->,回车进入配置RW007。在相应选项中回车进行参数修改。
RT-Thread:RW007-连接WIFI_第6张图片

引脚号 引脚 功能
22 PB6 CS
5 PA5 SCK
22 PB6 CS
39 PC7 D9 (忙引脚)
11 PA11 D8 (RESET引脚))

上面引脚编号如何得来的,这个需要配置好工程,打开源码Drivers文件夹下drv_gpio.c文件才能查看。

7、开启 WiFi 框架
进入目录RT-Thread Components —>Device Drivers —>Using WiFi —>,选中Using Wi-Fi framework
RT-Thread:RW007-连接WIFI_第7张图片
7、退出env并配置,选中yes回车保存退出
RT-Thread:RW007-连接WIFI_第8张图片


6、更新、修改、编译和下载工程源码

1、在env中输入pkgs --update命令并回车进行下载更新工程软件包

注意:以上命令的--为两个横杆,本人粗心在这坑了自己。

RT-Thread:RW007-连接WIFI_第9张图片
2、输入scons --target=mdk5回车进行重新生成keil5工程,如果是keil4输入scons --target=mdk4。

注意:以上命令的--为两个横杆。

RT-Thread:RW007-连接WIFI_第10张图片
3、打开工程
RT-Thread:RW007-连接WIFI_第11张图片
4、使用scons --target=mdk5或scons --target=mdk4命令重新生成工程后第一次打开工程都会遇到如下界面,右边窗口直接关闭一般无法关闭,需要进入任务管理器才可以关闭,左边窗口点击Stop waiting,然后在进芯片选择。
RT-Thread:RW007-连接WIFI_第12张图片
5、选择STM32F407ZG芯片,并点击ok,然后在下个弹出窗口点击确定。
RT-Thread:RW007-连接WIFI_第13张图片
RT-Thread:RW007-连接WIFI_第14张图片
注意:现在大家已经打开工程,大家有可能会遇到无法使用go to definition功能,勾选一个选项即可。(不勾选:编译速度快,勾选:编译速度慢)
RT-Thread:RW007-连接WIFI_第15张图片
6、打开spi_wifi_rw007.c文件进行SPI速率调整,速度调整至6M。
RT-Thread:RW007-连接WIFI_第16张图片

注意:

虽然注释写着最高30M,实质上这里也是一个大坑。调整30-20M,根本无法使用,调整20 - 6M时,可能会出现无法初始化成功,或者初始化成功却无法连接上指定wifi热点,调整速度低于3M时,出现无法搜索到周边某些wifi热点,本人的手机开的热点就无法搜索得到,在这里我摸索了2天才搞清楚。所以总结3-6M是比较稳定的。具体原因不详,这个和官方提供的驱动代码(开源)和RW007内部固件(闭源)有关,需要给官方时间去修复完善。

7、修改SPI初始化函数,修改SPI初始化引脚为PA5,PA6,PA7。
RT-Thread:RW007-连接WIFI_第17张图片

注意:

这里是我自己不熟悉坑了自己的地方,这里自动生成的初始化代码虽然是SPI1的,但是并不是我们硬件连接的PA5、PA6、PA7,所以需要当心了。

8、开始点击全编译按钮进行编译。编译完成后会有一个警告,双击定位警告,懂C语言的朋友都知道这是啥问题,这个问题不大,无需理会。
在这里插入图片描述
9、连接ST-Link仿真器,使用USB转串口模块连接至最小系统板的UART1,UART1默认为调试串口,波特率:115200,最小系统板上电,最后点击Download开始下载程序。下载完成后打开Xshell软件(点击查看Xshell使用教程),打开串口后,复位最小系统板,在小黑窗看到如下信息。说明就RW007模块初始化成功!
RT-Thread:RW007-连接WIFI_第18张图片

注意:

很多人打开Xshell,打开串口后,虽然没有提醒串口打开失败,但是实质上是没有打开成功的,因为你复位单片机也没有任何信息出现。这个时候就需要一个比较骚的操作,首先关闭Xshell的串口,然后使用普通的串口助手打开串口,复位单片机,这个时候会有打印一些启动信息,这时关闭串口助手的串口,再打开Xshell的串口,复位单片机,这个时候就能看到Xshell中有信息打印出来了。为什么会这样我也不清楚,希望有哪位大佬可以帮忙解答一下。

模块未出现上图初始化成功信息原因:

1、检查连线是否正确。
2、检查模块上LED是否闪烁,没有闪烁一般电源没接好,或者供电不稳定。
3、检查SPI速度和SPI初始化函数的引脚是否修改正确。
4、模块未烧写固件,这个需要联系卖家,提供固件以及烧写说明文档。

在这里细心的朋友就大概能看到使用Xshell和普通串口助手显示上的区别(并非指上面那骚操作),在左边普通串口助手会发现打印的时候会有一些奇怪的字符出现,右边的Xshell却没有,而且字符会有绿色和白色,之所以有颜色就是因为那些奇怪的字符…,所以推荐用,因为比较骚。
RT-Thread:RW007-连接WIFI_第19张图片


7、命令行控制RW007

1、输入wifi scan进行周边wifi扫描,输入wifi join XPH 12345678进行连接指定wifi(我的wifi名称是XPH,密码12345678,WIFI名称支持中文)
RT-Thread:RW007-连接WIFI_第20张图片

连接失败原因分析:

1、输入wifi scan显示wifi scan: command not found.,可能是前面env配置工程不正确。
2、扫描不到想要的wifi,检查自己开启的热点是否为2.4Ghz频段,检查前面SPI速度修改是否为2-6M之间的值。
3、输入wifi scan出现错误,复位单片机重新对RW007初始化
在这里插入图片描述
4、输入wifi join连接指定wifi时却提示为找到指定ap,:[W/WLAN.mgnt] F:rt_wlan_connect L:1091 not find ap! ssid:xxx,这时需要再次输入命令连接多几次,或者复位单片机重新扫描连接。
5、输入wifi join连接指定wifi时,只显示[I/WLAN.mgnt] wifi is connect ssid:xxx,未显示获取到IP,重新输入连接命令显示模块已经连接wifi,此时实质上连接上了wifi,但是并没有分配到IP,所以严格来说是连接时失败的,需要复位单片机重新扫描连接。


7、总结:

RW007模块还是挺不错的,我个人挺喜欢的,下期会做一个这个模块数据传输速度的小测试给大家。本人刚刚接触RT-Thread,第一次使用RW007模块,遇到了非常多的坑,从买模块到开始撰写文章,花了我将近3个星期的时间,虽然遇到买回来的模块官方没有固件在里边折腾了好久,不过客服也是挺好的立刻发固件给我们,而且还专门免费再寄了一个已经烧好固件的模块过来,寄过来的盒子里边还有官方的笔记本、logo小贴纸和手机支架。
本人第一次撰写文章,如有错漏多多批评指正,谢谢!

你可能感兴趣的:(RT-Thread:RW007-连接WIFI)