1)原理
无线网络上网可以简单地理解为无线上网,几乎所有智能手机、平板电脑和笔记本电脑都支持WiFi上网,是当今使用最广的一种无线网络传输技术。实际上就是把有线网络信号转换成无线信号,以前通过网线连接电脑,而WiFi则是通过无线电波来联网;常见的就是通过一个无线路由器,那么在这个无线路由器的电波覆盖的有效范围都可以采用WiFi连接方式进行联网。
2)相关硬件
使用WiFi需要相应的硬件支持。以下是TI公司提供的3种支持WiFi功能的硬件。
(1)CC3100 Wi-Fi BoosterPack(见图8-28)。TI提供了WiFi扩展板CC3100 Wi-Fi BoosterPack,它可以直接插在LaunchPad板卡上面。
图8-28 CC3100 WiFi BoosterPack引脚图
(2)RedBear Lab WiFi Mini。RedBear Lab WiFi Mini是一个特殊的WiFi扩展板,只能插在RedBear Lab CC3200开发板上(见图8-29)。
(3)CC3200 WiFi LaunchPad(见图8-30)。CC3200 WiFi LaunchPad本身自带WiFi模块。
3)WiFi类库
使用WiFi类库可以把LaunchPad接到互联网上,该库支持WEP和个人WPA2加密方式。使用WiFi类库需要包含该库的头文件WiFi.h;由于MCU是通过SPI总线连接到WiFi接口而实现网络功能的,所以也需要包含SPI.h头文件。WiFi类库和Ethernet类库十分相似,许多函数的调用都是一样的。
(1)WiFi类。该类用于完成WiFi的初始化和进行相关的网络配置,其成员函数如下。
①begin()。
功能:初始化网络设置。begin()函数自动使用DHCP配置网络地址信息。
语法:WiFi.begin();
WiFi.begin(ssid);
WiFi.begin(ssid,pass);
图8-29 ReaBear Lab WiFi Mini引脚图
图8-30 CC3200 WiFi LaunchPad引脚图
WiFi.begin(ssid,keyIndex,key)。
参数:ssid,准备接入的WiFi网络的SSID;
pass,字符串类型,WPA加密网络所设置的密码;
keyIndex,WEP加密网络可以设置4个不同的key,选择使用key的索引;
返回值:当连接到一个网络,返回WL_CONNECTED;当没有连接到一个网络,返回WL_IDLE_STATUS。
②disconnect()。
功能:断开当前连接的WiFi网络。
语法:WiFi.disconnect()。
参数:无。
返回值:无。
③config()。
功能:初始化以太网并进行相关配置。可以在参数中配置静态IP地址、DNS地址、网关、子网掩码。
语法:WiFi.config(ip);
WiFi.begin(ip,dns);
WiFi.begin(ip,dns,gateway);
WiFi.begin(ip,dns,gateway,subnet)。
参数:ip,本设备的IP地址;
dns,DNS服务器地址;
gateway,网关IP地址,默认为IP地址最后一个字节为1的地址;
subnet,子网掩码,默认为255.255.255.0。
返回值:无。
④setDNS()。
功能:配置DNS服务器。
语法:WiFi.setDNS(dns_server1);
WiFi.setDNS(dns_server1,dns_server2)。
参数:dns_server1,首要DNS的IP地址;
dns_server2,次要DNS的IP地址。
返回值:无。
⑤SSID()。
功能:获取当前网络的SSID。
语法:WiFi.SSID();
WiFi.SSID(wifiAccessPoint)。
参数:wifiAccessPoint,指定特定wifi AccessPoint。
返回值:当前网络的SSID。
⑥BSSID()。
功能:获取当前网络路由器的MAC地址。
语法:WiFi.BSSID(bssid)。
参数:6字节数组,用于存放路由器的MAC地址。
返回值:无。
⑦RSSI()。
功能:获取当前网络的信号强度。
语法:WiFi.RSSI();
WiFi.RSSI(wifiAccessPoint)。
参数:wifiAccessPoint,指定特定wifi AccessPoint。
返回值:当前网络的信号强度,单位dBm。
⑧encryption Type()。
功能:获取当前网络的加密方式。
语法:WiFi.encryption Type();
WiFi.encryption Type(wifiAccessPoint)。
参数:wifiAccessPoint,指定特定wifi AccessPoint。
返回值为byte类型,当前网络的加密方式,可取值如下:
a.TKIP(WAP)=2;
b.WEP=5;
c.CCMP(WPA)=4;
d.NONE=7;
e.AUTO=8。
⑨scan Networks()。
功能:搜索可接入的WiFi网络并返回发现网络的数量。
语法:WiFi.scanNetworks()。
参数:无。
返回值:发现网络的数量。
⑩getSocket()。
功能:获取第一个可使用的socket。
语法:WiFi.getSocket()。
参数:无。
返回值:第一个可使用的socket。
⑪mac Address()。
功能:获取WiFi设备的MAC地址。
语法:WiFi.macAddress(mac)。
参数:mac,存放MAC地址的6字节数组。
返回值:无。
(2)IPAddress类。
①localIP()。
功能:获取设备的IP地址。
语法:WiFi.localIP()。
参数:无。
返回值:设备的IP地址。
②subnet()。
功能:获取WiFi网络的子网掩码。
语法:WiFi.subnet()。
参数:无。
返回值:网络的子网掩码。
③gatewayIP()。
功能:获取WiFi网络的网管IP地址。
语法:WiFi.gatewayIP()。
参数:无
返回值:WiFi网络的网管IP地址。
(3)WiFiServer类。
①WiFiServer()。
功能:创建一个服务器对象,并指定监听端口。
语法:WiFiServer server(port)。
参数:server,一个WiFiServer类的对象;
port,监听端口。
返回值:无。
②begin()。
功能:服务器开始监听接入的连接。
语法:server.begin()。
参数:server,一个WiFiServer类的对象。
返回值:无。
③available()。
功能:获取一个连接到本服务器且可读数据的客户端对象。
语法:server.available()。
参数:server,一个WiFiServer类的对象。
返回值:一个客户端(WiFiClient类型)对象。
④write()。
功能:发送数据到所有连接到本服务器的客户端。
语法:server.write(data)。
参数:server,一个WiFiServer类的对象;
data,发送的数据,byte或char类型。
返回值:发送的字节数。
⑤print()。
功能:发送数据到所有连接到本服务器的客户端。数据以ASCII码的形式一个一个地发送。
语法:server.print(data);
server.print(data,BASE)。
参数:server,一个EthernetServer类的对象;
data,发送的数据,可以为byte、char、int、long、string类型;
BASE,指定数据以何种进制形式输出。
返回值:发送的字节数。
⑥println()。
功能:发送数据到所有连接到本服务器的客户端,最后再发送一个换行符。数据以ASCII码的形式一个一个地发送。
语法:server.println();
server.println(data);
server.println(data,BASE)。
参数:server,一个WiFiServer类的对象;(www.xing528.com)
data,发送的数据,可以为byte、char、int、long、string类型;
BASE,指定数据以何种进制形式输出。
返回值:发送的字节数。
(4)WiFiClient类。使用WiFiClient类可以创建一个客户端对象,用于连接到服务器,并发送或接收数据。其成员函数如下:
①WiFiClient()。
功能:创建一个客户端对象。
语法:WiFiClient client。
参数:client,一个WiFiClient类对象。
返回值:无。
②connect()。
功能:连接到指定的IP地址和端口。
语法:client.connect(ip,port);
client.connect(URL,port)。
参数:client,一个EthernetClient类对象;
ip,client准备连接的服务器的IP地址,必须是一个4字节的数组变量;
port,int类型,连接服务器的端口号。
返回值:boolean类型,如果连接成功,取值true,否则取值false。
③connected()。
功能:检查客户端是否已经连接。
语法:client.connected()。
参数:client,一个WiFiClient类对象。
返回值:boolean类型,为ture表示已经连接,为false表示没有连接。
④write()。
功能:发送数据到已经连接的服务器上。
语法:client.write(data)。
参数:client,一个WiFiClient类对象;
data,发送的数据,byte或char类型。
返回值:发送的字节数。
⑤print()。
功能:发送数据到已经连接的服务器上。数据以ASCII码的形式一个一个地发送。
语法:client.print(data);
client.print(data,BASE)。
参数:client,一个WiFiClient类对象;
data,发送的数据,可以为byte、char、int、long、string类型;
BASE,指定数据以何种进制形式输出。
返回值:发送的字节数。
⑥println()。
功能:发送数据到已经连接的服务器上,最后再发送一个换行符。数据以ASCII码的形式一个一个地发送。
语法:client.println();
client.println(data);
client.println(data,BASE)。
参数:client,一个WiFiClient类对象;
data,发送的数据,可以为byte、char、int、long、string类型;
BASE,指定数据以何种进制形式输出。
返回值:发送的字节数。
⑦available()。
功能:获取可读字节数。可读数据为所连接的服务端发送来的数据。
语法:client.available()。
参数:client,一个WiFiClient类对象。
返回值:可读的字节数。如果没有可读数据,则返回-1。
⑧read()。
功能:读取接送到的数据。
语法:client.read()。
参数:client,一个WiFiClient类对象。
返回值:一个字节的数据。如果没有可读数据,则返回-1。
⑨flush()。
功能:清除已写入客户端但还没有被读取的数据。
语法:client.flush()。
参数:client,一个WiFiClient类对象。
返回值:无。
⑩stop()。
功能:断开与服务器的连接。
语法:client.stop()。
参数:client,一个WiFiClient类对象。
返回值:无。
(5)WiFiUDP类。使用WiFiUDP类可以发送或接收UDP报文。其成员函数如下。
①WiFiUDP()。
功能:WiFiUDP类构造函数,完成WiFiUDP类对象的初始化。
语法:WiFiUDP Udp。
参数:Udp,定义一个WiFiUDP类对象。
②begin()。
功能:初始化UDP库并进行相关的网络配置。
语法:Udp.begin(localPort)。
参数:Udp,一个WiFiUDP类对象;
localPort,int类型,本地监听端口号;
返回值:boolean类型,为ture表示已经连接,为false表示没有连接。
③available()。
功能:获取缓存区中可读字节数。首先要调用Udp.parsePacket(),然后available()函数才有效。
语法:Udp.available()。
参数:Udp,一个WiFiUDP类对象。
返回值:可读的字节数。如果没有可读数据,则返回-1。
④beginPacket()。
功能:开始向远程设备发送UDP数据包。
语法:Udp.beginPacket(remoteIP,remotePort)。
参数:Udp,一个WiFiUDP类对象;
remoteIP,远程连接对端的IP地址(4 bytes);
remotePort,远程连接对端的端口号(int)。
返回值:无。
⑤endPacket()。
功能:完成UDP数据包的发送。
语法:Udp.endPacket()。
参数:Udp,一个WiFiUDP类对象。
返回值:无。
⑥write()。
功能:向UDP连接的对端发送UDP数据包。write()函数需要在beginPacket()和endPacket()函数之间调用。
语法:Udp.write(message);
Udp.write(buffer,size)。
参数:Udp,一个WiFiUDP类对象;
message,准备发送的数据(char);
buffer,存放发送数据的数组(byte或者char);
size,buffer的长度。
返回值:发送的字节数。
⑦parsePacket()。
功能:检测是否有DUP数据包可读取,如果有则返回其可读字节数。
语法:Udp.parsePacket()。
参数:Udp,一个WiFiUDP类对象。
返回值:int类型,表示UDP数据包的大小。如果没有可读数据,则返回-1。
⑧read()。
功能:从指定缓存区中读取接送到的UDP数据。在使用该函数之前必须前调用parsePacket函数。
语法:Udp.read();
Udp.read(packetBuffer,MaxSize)。
参数:Udp,一个Ethernet UDP类对象;
packetBuffer,用于接收数据包的缓存区(char);
MaxSize,缓存区的最大容量(int)。
返回值:char类型,表示从缓存区中读取到的字符数。
⑨stop()。
功能:终止Udp连接。
语法:Udp.stop()。
参数:Udp,一个WiFiUDP类对象。
返回值:无。
⑩remoteIP()。
功能:获得远程设备的IP地址。
语法:Udp.remoteIP()。
参数:Udp,一个WiFiUDP类对象。
返回值:4个字节的IP地址,UDP连接对端的IP地址。
⑪remotePort()。
功能:获得远程连接的端口号。
语法:Udp.remotePort()。
参数:Udp,一个WiFiUDP类对象。
返回值:int类型,远程连接的端口号。
4)WiFi Web服务器
在菜单栏中打开“File”→“Examples”→“WiFi”→“SimpleWebServer WiFI”,这时在编辑窗口会出现程序,如表8-18所示。该示例将展示Energia环境下LaunchPad通过WiFi库建立一个简单的Web Server,用户可以通过浏览器连接到该服务器,打开网页点击按钮开关连接到LaunchPad第9号引脚的LED灯。
表8-18 WiFi应用示例程序清单
(续表)
(续表)
(续表)
(续表)
上载程序到CC3200 WiFi LaunchPad,打开串口监视器,观察输出。假设串口监视器最后一行输出的是http://192.168.1.177,用处于同一个网络的计算机打开浏览器,在地址栏输入http://192.168.1.177/H,观察LaunchPad上的RED_LED灯,该灯会亮起来;接着在地址栏输入http://192.168.1.177/L,再次观察LaunchPad上的RED_LED灯,该灯熄灭了。
【注释】
[1]lx,照度单位,指照射到单位面积上的光通量。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。