WiFi
更新时间:2017-08-08 阅读:13941
目录
Fireduino -- WiFi
Fireduino 板子上集成了WiFi 模块,使用的是AP6181 实际上为博通的BCM43362 ,是一款单频段2.4GHz支持IEEE802.11b/g/n协议,SDIO接口的WiFi 模组,具体请参数可以参考AP6181 以及BCM43362 DataSheet。
Fireduino WiFi 库
Fireduino WiFi 库的设计以Arduino WiFi库为蓝本设计,尽量兼容Arduino WiFi library ; Arduino WiFi Shield 的示例程序在不用修改的情况下即可在Fireduino 上运行。
Fireduino WiFi API
WiFi class
WiFi 设置以及网络设置
begin()
说明 初始化WiFi 库 以及接入WiFi 热点。
语法 WiFi.begin(ssid); WiFi.begin(ssid, pass);
参数 ssid : 接入点 pass:密钥
返回 WiFi 当前状态
disconnect()
说明 断开与当前网络建立的连接。
语法 WiFi.disconnect();
参数 无
返回 无
config()
说明 配置网络。
语法 WiFi.config(ip); WiFi.config(ip, dns); WiFi.config(ip, dns, gateway); WiFi.config(ip, dns, gateway, subnet);
参数 ip :设备的IP 地址 dns :DNS 服务器地址 gateway :网关地址 subnet :网络子掩码
返回 无
setDNS()
说明 设置DNS服务器地址。
语法 WiFi.setDNS(dns_server1) WiFi.setDNS(dns_server1, dns_server2);
参数 dns_server1:主DNS服务器地址 dns_server2:辅DNS服务器地址
返回 无
SSID()
说明 获取当前网络SSID名称。
语法 WiFi.SSID(); WiFi.SSID(wifiAccessPoint);
参数 wifiAccessPoint :指定接入点
返回 当前网络的SSID字符串
BSSID()
说明 获取接入点的 MAC。
语法 WiFi.BSSID(bssid);
参数 bssid : 6 个字节的 MAC 数组
返回 6 个字节的 MAC 数组
RSSI()
说明 获取与当前接入点的信号强度。
语法 WiFi.RSSI(); WiFi.RSSI(wifiAccessPoint);
参数 wifiAccessPoint :指定接入点
返回 接入点的信号强度
encryptionType()
说明 获取当前网络的加密类型。
语法 WiFi.encryptionType(); WiFi.encryptionType(wifiAccessPoint);
参数 wifiAccessPoint :指定接入点
返回 网络的加密类型
scanNetworks()
说明 扫描当前环境下的接入点。
语法 WiFi.scanNetworks();
参数 无
返回 发现的网络数量
status()
说明 获取连接状态。
语法 WiFi.status();
参数 无
返回 连接状态
macAddress()
说明 获取WiFi 模组的 MAC 地址。
语法 WiFi.macAddress(mac);
参数 mac: 6 个字节的 MAC 数组
返回 6 个字节的 MAC 数组
IPAddress class
IPAddress 类提供了网络的配置信息
localIP()
说明 获取WiFi 网络 的IP 地址。
语法 WiFi.localIP();
参数 无
返回 WiFi网络 的IP 地址
subnetMask()
说明 获取WiFi网络 的网络子掩码。
语法 WiFi.subnet();
参数 无
返回 网络子掩码
gatewayIP()
说明 获取 WiFi网络 的网关地址。
语法 WiFi.gatewayIP();
参数 无
返回 WiFi网络 的网关地址
Server class
服务器类能创建一个服务,从客户端接受收据以及发送送数据给客户端
WiFiServer()
说明 创建一个服务,在指定的端口监听接入的客户端。
语法 Server(port);
参数 port:监听的端口
返回 无
begin()
说明 告诉Server开始监听。
语法 server.begin();
参数 无
返回 无
available()
说明 获取一个接入的客户端。
语法 server.available();
参数 无
返回 一个客户端对象,如果没有客户端接入,返回为 false 的客户端对象
write()
说明 写数据到所有的连入的客户端。
语法 server.write(data);
参数 data:写入的字节
返回 写入的字节数。
print()
说明 打印数据到所有的连入的客户端。
语法 server.print(data) server.print(data, BASE);
参数 data :打印的数据 BASE :打印格式(BYTE、BIN、OCT、DEC、HEX)
返回 打印的字节数
println()
说明 打印数据到所有的连入的客户端,其次是换行。
语法 server.println(); server.println(data); server.println(data, BASE);
参数 data :打印的数据 BASE :打印格式(BYTE、BIN、OCT、DEC、HEX)
返回 打印的字节数
Client class
客户端类能创建一个客户端连入服务端,进行数据的发送和接收。
Client
Client 是所有客户端的基类,它不是直接调用的,但调用客户端类的函数都依赖于它。
WiFiClient()
说明 创建一个客户端对象,通过 client.connect() 连接入远程IP和端口。
语法 WiFiClient();
参数 无
返回 客户端对象
connected()
说明 客户端的连接状态。
语法 client.connected();
参数 无
返回 客户端连接状态,true or false
connect()
说明 连接入远程服务器端。
语法 client.connect(ip, port); client.connect(URL, port);
参数 ip :客户端将连接到的IP地址 URL :客户端将连接到的域名地址。例如("arduino.cc") port :客户端将连接到远程的端口号
返回 成功则返回true,否则为 false
write()
说明 写入数据到服务器端。
语法 client.write(data);
参数 data:写入的字节
返回 写入的字节数。
print()
说明 打印数据到服务器端。
语法 client.print(data); client.print(data, BASE);
参数 data :打印的数据 BASE :打印格式(BYTE、BIN、OCT、DEC、HEX)
返回 打印的字节数
println()
说明 打印数据到服务器端,其次是回车和换行符。
语法 client.println(); client.println(data); client.print(data, BASE);
参数 data :打印的数据 BASE :打印格式(BYTE、BIN、OCT、DEC、HEX)
返回 打印的字节数
available()
说明 返回可供读取的字节数。
语法 client.available();
参数 无
返回 可读取的字节数
read()
说明 读取下一个字节。
语法 client.read();
参数 无
返回 下一个字节
flush()
说明 冲洗缓冲区。
语法 client.flush();
参数 无
返回 无
stop()
说明 断开与服务器端的连接。
语法 client.stop();
参数 无
返回 无
UDP class
UDP 类 允许发送和接收UDP消息。
WiFiUDP
创建一个UDP类实例,可以发送可接收UDP消息
begin()
说明 初始化UDP库和网络设置,开始监听本地 port 端口。
语法 WiFiUDP.begin(port);
参数 port:监听本地的端口
返回 1:成功 0:失败
available()
说明 获得缓冲器的可读数据大小。
语法 WiFiUDP.available();
参数 无
返回 当前包中可用的字节数
beginPacket()
说明 开始一个UDP连接,准备写入数据到远程主机。
语法 WiFiUDP.beginPacket(hostName, port); WiFiUDP.beginPacket(hostIp, port);
参数 hostName :远程主机域名 hostIp :远程主机IP地址 port :远程主机端口
返回 1:成功 0:失败
endPacket()
说明 在写入UDP 数据后,组包发送至远程主机。
语法 WiFiUDP.endPacket(); ;
参数 无
返回 1:成功 0:失败
write()
说明 写入数据至远程UDP主机,必须在beginPacket() 和endPacket() 间调用,它在调用endPacket()后发送。
语法 WiFiUDP.write(byte); WiFiUDP.write(buffer, size);;
参数 byte :写入的字节 buffer :缓冲区指针 size :长度大小
返回 写入的长度大小
parsePacket()
说明 它开始处理下一个可用的UDP消息,并报告大小。
语法 UDP.parsePacket();;
参数 无
返回 可用的UDP包大小
peek()
说明 偷窥数据。
语法 WiFiUDP.peek();
参数 无
返回 偷窥的数据,-1则代表没有数据可看
read()
说明 从指定缓冲区读取数据,在WiFiUDP.parsePacket(). 成功之后调用。
语法 WiFiUDP.read(); WiFiUDP.read(buffer, len);
参数 buffer: 读取的缓冲区数据指针 len: 最大长度
返回 读取到的数据 读取到的数据长度
flush()
说明 冲洗缓冲区。
语法 WiFiUDP.flush();
参数 无
返回 无
stop()
说明 断开连接,释放资源。
语法 WiFiUDP.stop();
参数 无
返回 无
remoteIP()
说明 获取远程主机IP地址,在WiFiUDP.parsePacket(). 成功后调用。
语法 WiFiUDP.remoteIP();
参数 无
返回 远程主机IP地址
remotePort()
说明 获取远程主机端口号,在WiFiUDP.parsePacket(). 成功后调用。
语法 WiFiUDP.remotePort();
参数 无
返回 远程主机端口号
Firedino WiFi 示例程序
#include <WiFi.h> char ssid[] = "yourNetwork"; // your network SSID (name) char pass[] = "secretPassword"; // your network password (use for WPA, or use as key for WEP) int keyIndex = 0; // your network key Index number (needed only for WEP) int status = WL_IDLE_STATUS; WiFiServer server(23); boolean alreadyConnected = false; // whether or not the client was connected previously void setup() { //Initialize serial and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } // check for the presence of the shield: if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); // don't continue: while (true); } String fv = WiFi.firmwareVersion(); if (fv != "1.1.0") { Serial.println("Please upgrade the firmware"); } // attempt to connect to Wifi network: while (status != WL_CONNECTED) { Serial.print("Attempting to connect to SSID: "); Serial.println(ssid); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: delay(10000); } // start the server: server.begin(); // you're connected now, so print out the status: printWifiStatus(); } void loop() { // wait for a new client: WiFiClient client = server.available(); // when the client sends the first byte, say hello: if (client) { if (!alreadyConnected) { // clead out the input buffer: client.flush(); Serial.println("We have a new client"); client.println("Hello, client!"); alreadyConnected = true; } if (client.available() > 0) { // read the bytes incoming from the client: char thisChar = client.read(); // echo the bytes back to the client: server.write(thisChar); // echo the bytes to the server as well: Serial.write(thisChar); } } } void printWifiStatus() { // print the SSID of the network you're attached to: Serial.print("SSID: "); Serial.println(WiFi.SSID()); // print your WiFi shield's IP address: IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); // print the received signal strength: long rssi = WiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); }