Fireduino

拥有双核Cortex-M3处理器,集成高质量音频Codec和WiFi模组,拥有良好的IOT扩展性能,完美兼容Arduino IDE和Arduino标准接口,并支持FireBlock图形化编程软件,是一款首选的编程启蒙教学平台,更是一款开源的创意原型平台。

WiFi

更新时间:2017-08-08 阅读:13403

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");
}