wifi模块四种工作模式介绍
wifi模块常见的四种工作模式:透传模式、串口指令模式、httpd client模式、gpio模式。使wifi模块可以适用于不同环境下工作。透明传输模式:在该模式下,模块实现串口与网络之间的透明传输,实现通用串口设备与网络设备之间的数据传递。串口指令模式:在该模式下,用户可以按照我们的协议发送数据给服务器,无需重启即可向不同的服务器发送数据。gpio模式:在该模式下,用户可以发送我们协议的指令控制模块的六个引脚,分别是txd、rxd、cts、rts、nready,nlink。
1、透明传输模式
usr-wifi232-a/b/c模块支持串口透明传输模式,可以实现串口即插即用,从而最大程度的降低用户使用的复杂度。在此模式下,所有需要收发的数据都被在串口与wifi接口之间做透明 传输,不做任何解析。
在透明传输模式下,可以完全兼容用户原有的软件平台。用户设备基本不用做软件改动就可以实现支持无线数据传输。
《说明》:
透明传输模式是复杂度最少的数据传输。用户也打开串口的硬件流控(cts/rts)功能,这样可以使误码率降到最低。如果用户不需要串口的硬件流控功能,只需要把相应pin脚(cts/rts)悬空就可以。
2、串口指令模式
在此模式下,用户可以将串口的数据发往不同的服务器地址,此模式可以用udp或是tcp client向服务器发送数据。
客户mcu按照下面的格式发送数据包,模块解析完成后,只将n字节的数据发送到目标地址。当有数据返回时,不做解析直接将数据从串口输出。
3、gpio模式
高性能wifi模块,支持gpio模式。gpio模式下uart的4个引脚定义为gpio,nready,nlink也定义成gpio。
模块工作在gpio模式时,pc或其它网络设备可以通过wifi与模块建立连接(tcp/udp),然后通过命令控制gpio或读gpio状态。命令如下:
gpio n in:设置gpion为输入,返回gpio ok或gpio nok
gpio n out 0:设置gpion为输出低电平,返回命令ok或命令nok
gpio n out 1:设置gpion为输出高电平,返回命令 ok或命令 nok
gpio n sw:设置gpion为输出并改变原来高低电平状态,返回gpio ok或gpio nok
gpio n pwm m1 m2:设置gpion输出一个高低变化的电平,m1为高电平时间,m2为低电平时间(时间单位ms,最小10 ms),返回gpio ok或gpio nok
gpio n get:读取gpion状态,返回i0,i1,o0,o1分别表示输入低,输入高,输出低,输出高。
注意:n可以为3,4,5,6,8,9,与模块pin脚对应。其中gpio 4只能做输入,gpio 3只能做为输出。
gpio read返回当前所有io的状态,与gpio n get的表示方法一致。如,i1i1i0i0i0i0o1,i表示输入,o表示输出。0表示低,1表示高。
4这个引脚是取反的。读到1实际为0,读到0实际为1。
4、httpd client模式
此模式用于从http服务器请求数据或是向服务器提交数据。
用户在用at指令或是网页设置好http报头的具体内容后。每次发送数据时,模块会自动将所发送的数据封装成http协议数据,发送到指定http服务器上。方便用户直接从http服务器读取或提交数据。
wifi模块工作模式浅析
这里我们这样使用我们的设备,开发板上插上网线和wifi模块。其工作原理是通过网线把网络接到开发板,我们的wifi模块作为无线的接入点,组成一个迷你的无线路由器。我们的电脑就能通过连接开发板上的ap来上网了。
首先我们还是从ifconfig开始:
~ 》: ifconfig -a
eth0 link encap:ethernet hwaddr 00:e5:49:83:76:1a
inet addr:192.168.1.168 bcast:192.168.1.255 mask:255.255.255.0
up broadcast running multicast mtu:1500 metric:1
rx packets:1 errors:0 dropped:0 overruns:0 frame:0
tx packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
rx bytes:64 (64.0 b) tx bytes:0 (0.0 b)
interrupt:51 base address:0x4300
lo link encap:local loopback
inet addr:127.0.0.1 mask:255.0.0.0
up loopback running mtu:16436 metric:1
rx packets:0 errors:0 dropped:0 overruns:0 frame:0
tx packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
rx bytes:0 (0.0 b) tx bytes:0 (0.0 b)
wlan0 link encap:ethernet hwaddr 00:0c:43:30:72:81
broadcast multicast mtu:1500 metric:1
rx packets:0 errors:0 dropped:0 overruns:0 frame:0
tx packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
rx bytes:0 (0.0 b) tx bytes:0 (0.0 b)
~ 》: ifconfig wlan0 192.168.1.2 netmask 255.255.255.0 up
~ 》: ifconfig
eth0 link encap:ethernet hwaddr 00:e?49:83:76:1a
inet addr:192.168.1.168 bcast:192.168.1.255 mask:255.255.255.0
up broadcast running multicast mtu:1500 metric:1
rx packets:14 errors:0 dropped:0 overruns:0 frame:0
tx packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
rx bytes:896 (896.0 b) tx bytes:272 (272.0 b)
interrupt:51 base address:0x4300
lo link encap:local loopback
inet addr:127.0.0.1 mask:255.0.0.0
up loopback running mtu:16436 metric:1
rx packets:0 errors:0 dropped:0 overruns:0 frame:0
tx packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
rx bytes:0 (0.0 b) tx bytes:0 (0.0 b)
wlan0 link encap:ethernet hwaddr 00:0c:43:30:72:81
inet addr:192.168.1.2 bcast:192.168.1.255 mask:255.255.255.0
up broadcast multicast mtu:1500 metric:1
rx packets:0 errors:0 dropped:0 overruns:0 frame:0
tx packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
rx bytes:0 (0.0 b) tx bytes:0 (0.0 b)
如果你想要让你的迷你路由器支持dhcp自动分配ip,那么你首先要在你的开发板上移植dhcpd的命令(busybox中也有udhcpd的命令,不过功能没有dhcpd强大)
它的一些配置文件为:
/tmp 》: vim dhcpd_wlan0.conf
subnet 192.168.5.0 netmask 255.255.255.0 {
range 192.168.5.10 192.168.5.100;/分配的子网的范围/
option domain-name-servers 4.2.2.2, 8.8.8.8;/域名解析服务器/
option routers 192.168.5.1;/配置路由器表/
default-lease-time 18800;
max-lease-time 72000;
authoritative;
}
subnet 子网
网络的一部分。它是物理上独立的网络段,与网络其它部分共享网络地址,并用子网号区分。
并在/tmp目录下用touch创建dhcpd_wlan0.leases文件
之后运行命令dhcpd -q -pf dhcpd_wlan0.pid -cf dhcpd_wlan0.conf -lf dhcpd_wlan0.leases wlan0
/tmp 》: vim dhcpd_wlan0.pid
704 /这里的进程号是我们dhcp服务开启时,自己把进程号写入到这个文件中,每次启用都会覆盖写入/
就设置好了dhcp的服务。
之后我们就要用hostapd工具来配置我们的迷你路由器了,没有这个工具请自行百度移植。(要学会利用好百度,goole)它的配置文件为:
/apps/etc/network 》: vim hostapd.conf
# software ap daemon program hostapd configure file
# file:/apps/etc/network/hostapd.conf
# copyright (c) 2012 guowenxue 《guowenxue@gmail.com qq:281143292》
ctrl_interface=/var/run/hostapd
interface=wlan0
#bridge=br0
driver=nl80211
ssid=router_s3c2440/你可以给你的wifi起个自己想要的名字/
hw_mode=g
channel=7 /802.11b/g工作在2.4~2.4835ghz频段,这些频段被分为11或13个信道,我们一般设置小于10/
macaddr_acl=0
auth_algs=1
ieee80211n=1
dtim_period=2
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
eap_server=0
wpa=2
wpa_passphrase=lingyun_embedded/自己设置密码/
wpa_key_mgmt=wpa-psk
# wpa standard definition only support tkip, but the vendor
# support aes-ccmp(a.k.a aes or ccmp) too.
wpa_pairwise=tkip ccmp
# rsn(a.k.a wpa2) standard define support tikp aes-ccmp.
rsn_pairwise=tkip ccmp
wpa_group_rekey=86400
wpa_gmk_rekey=86400
如果你曾配置过路由器,有些选项你会熟悉吧。初学没必要把每个选项弄懂,把几个重要的设置好就行了。
配置好之后就可以运行了:
~ 》: mkdir -p /var/run/hostapd
~ 》: hostapd -b /apps/etc/network/hostapd.conf
configuration file: /apps/etc/network/hostapd.conf
using interface wlan0 with hwaddr 00:0c:43:30:72:81 and ssid ‘router_s3c2440’
~ 》: ls /var/run/hostapd/
wlan0(不清楚这里生成和下面的mon.wlan0有什么关系,有大神请留言指教)
可以看到生成的wlan0,而且
~ 》: ifconfig
eth0 link encap:ethernet hwaddr 00:e5:49:83:76:1a
inet addr:192.168.1.168 bcast:192.168.1.255 mask:255.255.255.0
up broadcast multicast mtu:1500 metric:1
rx packets:371446 errors:0 dropped:43 overruns:0 frame:0
tx packets:306189 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
rx bytes:360520116 (343.8 mib) tx bytes:140937225 (134.4 mib)
interrupt:51 base address:0x4300
lo link encap:local loopback
inet addr:127.0.0.1 mask:255.0.0.0
up loopback running mtu:16436 metric:1
rx packets:22 errors:0 dropped:0 overruns:0 frame:0
tx packets:22 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
rx bytes:1320 (1.2 kib) tx bytes:1320 (1.2 kib)
mon.wlan0 link encap:unspec hwaddr 00-0c-43-30-72-81-00-00-00-00-00-00-00-00-00-00
up broadcast running multicast mtu:1500 metric:1
rx packets:2883 errors:0 dropped:0 overruns:0 frame:0
tx packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
rx bytes:329852 (322.1 kib) tx bytes:0 (0.0 b)
wlan0 link encap:ethernet hwaddr 00:0c:43:30:72:81
inet addr:192.168.5.1 bcast:192.168.5.255 mask:255.255.255.0
up broadcast running multicast mtu:1500 metric:1
rx packets:310453 errors:0 dropped:0 overruns:0 frame:0
tx packets:372073 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
rx bytes:141302428 (134.7 mib) tx bytes:365778847 (348.8 mib)
会发现多生成了一个mon.wlan0的网络接口。这个查了下也没弄清是怎么工作的。
但是现在你还无法上网,联网的结果是会是受限的访问权限。
这是因为我们数据没法通过路由器转发出去,解决方法是用iptables来实现nat。首先你要移植iptables到你的开发板,
nat分成了两种类型,即源nat(snat)和目的nat(dnat),顾名思义,所谓snat就是改变转发数据包的源地址,所谓dnat就是改变转发数据包的目的地址。
nat表也有三条缺省的“链”(chains),这三条链也是规则的容器,它们分别是:
prerouting:可以在这里定义进行目的nat的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的nat;
postrouting:可以在这里定义进行源nat的规则,系统在决定了数据包的路由以后在执行该链中的规则。
output:定义对本地产生的数据包的目的nat规则。
有一种snat的特殊情况是ip欺骗,也就是所谓的masquerading,通常建议在使用拨号上网的时候使用,或者说在合法ip地址不固定的情况下使用。
对于nat没什么深入研究,下面有个网址讲的不错:
http://www.51cto.com/html/2005/0813/1388.htm
配置snat
linux可以很方便的通过iptables配置snat服务器,命令如下:
~ 》: ptables -t nat -i postrouting -o eth0 -j masquerade
~ 》: iptables -a forward -s 192.168.5.0/24 -j accept
~ 》: iptables -a forward -d 192.168.5.0/24 -j accept
其中第一条表示将通过本机的转发数据包从eth0(外网)这个网卡发出去,另外两条表示只转发192.168.5.0/24这个网段过来的数据包,这个网段正好是wlan0其它设备连上本机以后分配的网段。
还需要在打开内核的ip转发功能:
~ 》: vim /etc/sysctl.conf
添加或修改这样一段:
net.ipv4.conf.default.rp_filter = 1
然后执行命令
~ 》: sysctl -p
再把我们的网线连上开发板,我们的电脑就可以连接开发板上网了。
华为P50或将首发搭载索尼1英寸IMX800
什么情况下会用到D/A转换器? DA转换器有哪几种类型
人脸识别技术在智能零售行业中的应用优势
两个指标让GAN训练更有效
17年第一旗舰机携3D拍摄技术:荣耀V9等你来拿!
WIFI模块四种工作模式介绍_WIFI模块工作模式浅析
德国政府仍然对区块链货币的前景持谨慎态度
诺基亚真旗舰来了!京东竟然把诺基亚8的价格泄露了,价格感人
屏蔽布线的必备知识
便携式土壤检测仪器的功能特点介绍
5G矿山、工业真金以及智能体矿井
飞思卡尔活动与健康监测仪设计方案
电气控制回路中竞争与冒险问题
歼20战机有多强,美终于承认,歼20是世界上顶级的战机
华为11款手机全面开启EMUI 11公测
阿里人工智能这七年:“云字辈”的AI之路
快速泄放电路的上、下电过程分析
除了比特币 区块链技术还会掀起怎样的风暴?
数字7段脉冲计数器电路分享
受缺芯影响,伟世通或将关闭部分工厂