範例說明
常見的WiFi有三種加密方式,一種為OPEN,即沒有密碼,第二種為WPA,即我們通常使用的密碼,第三種為WEP,會需要十六進制的密碼以及一個初向量(keyindex)。
下面我們將分別介紹這三種加密方式的WiFi連線方法。
首先確定板子是 Ameba, “Tools” -> “Board” -> “Arduino Ameba”
下面我們將分別介紹這三種加密方式的WiFi連線方法。
首先確定板子是 Ameba, “Tools” -> “Board” -> “Arduino Ameba”
- Open (即無密碼的WiFi連線)
打開 Connect No Encryption 的範例, “File” -> “Examples” -> “AmebaWiFi” -> “ConnectNoEncryption”
status = WiFi.begin(ssid);
在SSID後修改“yourNetwork”為要連線的WiFi名稱。
修改之後上傳程式碼,按下Ameba的Reset按鈕, 這時候會看到You’re connected to the networkSSID: XXXXX,以及後面會每十秒列印出WiFi信息。
- WPA加密模式的WiFi連線
打開 Connect With WPA 的範例, “File” -> “Examples” -> “AmebaWiFi” -> “ConnectWithWPA”
status = WiFi.begin(ssid, pass);
在SSID後修改“yourNetwork”為要連線的WiFi名稱, “secretPassword”改為對應的密碼。
- WEP加密模式的WiFi連線
打開 Connect With WEP 的範例, “File” -> “Examples” -> “AmebaWiFi” -> “ConnectWithWEP”
在SSID後修改“yourNetwork”為要連線的WiFi名稱, key改為對應的十六進制的密碼,keyIndex 修改為對應的數字。
修改之後上傳程式碼,按下Ameba的Reset按鈕, 這時候會看到You’re connected to the networkSSID: XXXXX,以及後面會每十秒列印出WiFi信息。
status = WiFi.begin(ssid, keyIndex, key);
程式碼說明
在連線WiFi時會使用到WiFi.begin();
https://www.arduino.cc/en/Reference/WiFiBegin
連線成功後會讀取WiFi的信息:
顯示WiFi的名稱WiFi.SSID()
https://www.arduino.cc/en/Reference/WiFiSSID
顯示WiFi的訊號強度WiFi.RSSI()
https://www.arduino.cc/en/Reference/WiFiRSSI
顯示WiFi的加密方式WiFi.encryptionType()
https://www.arduino.cc/en/Reference/WiFiEncryptionType
顯示連線的路由器的物理地址即BSSID WiFi.BSSID()
https://www.arduino.cc/en/Reference/WiFiBSSID
也會讀取Ameba自己的信息:
顯示Ameba的MAC信息WiFi.macAddress()
https://www.arduino.cc/en/Reference/WiFiMACAddress
顯示Ameba的IP信息WiFi.localIP()
https://www.arduino.cc/en/Reference/WiFiLocalIP
顯示子網掩碼WiFi.subnetMask()
https://www.arduino.cc/en/Reference/WiFiSubnetMask
顯示網關信息WiFi.gatewayIP()
https://www.arduino.cc/en/Reference/WiFiGatewayIP
https://www.arduino.cc/en/Reference/WiFiBegin
連線成功後會讀取WiFi的信息:
顯示WiFi的名稱WiFi.SSID()
https://www.arduino.cc/en/Reference/WiFiSSID
顯示WiFi的訊號強度WiFi.RSSI()
https://www.arduino.cc/en/Reference/WiFiRSSI
顯示WiFi的加密方式WiFi.encryptionType()
https://www.arduino.cc/en/Reference/WiFiEncryptionType
顯示連線的路由器的物理地址即BSSID WiFi.BSSID()
https://www.arduino.cc/en/Reference/WiFiBSSID
也會讀取Ameba自己的信息:
顯示Ameba的MAC信息WiFi.macAddress()
https://www.arduino.cc/en/Reference/WiFiMACAddress
顯示Ameba的IP信息WiFi.localIP()
https://www.arduino.cc/en/Reference/WiFiLocalIP
顯示子網掩碼WiFi.subnetMask()
https://www.arduino.cc/en/Reference/WiFiSubnetMask
顯示網關信息WiFi.gatewayIP()
https://www.arduino.cc/en/Reference/WiFiGatewayIP
與Arduino的差異
Arduino在完成WiFi的操作時,需要另外使用WiFi Shield來作為WiFi模塊,因此在使用WiFi是需要#include 來使用SPI與WiFi模塊進行通訊。
但是Ameba自身就具有WiFi模塊的功能,因此,不需要#include 。若想要使用Arduino的範例,要先刪掉這一項。
但是Ameba自身就具有WiFi模塊的功能,因此,不需要#include 。若想要使用Arduino的範例,要先刪掉這一項。
code study
char ssid[] = "jacky_0328"; // your network SSID (name)
char pass[] = "your password"; // your network password
int status = WL_IDLE_STATUS; // the Wifi radio's status
先等 serial windows 開啟
然後利用一個while loop 去check 連線
status = WiFi.begin(ssid, pass);
ssid 和pass 就是開始code設定
然後呼叫 printCurrentNet() 和 printWifiData();
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 WPA SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network:
status = WiFi.begin(ssid, pass);
// wait 10 seconds for connection:
delay(10000);
}
// you're connected now, so print out the data:
Serial.print("You're connected to the network");
printCurrentNet();
printWifiData();
}
這邊就和 scan wifi 的例子很像...
void printCurrentNet() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print the MAC address of the router you're attached to:
byte bssid[6];
WiFi.BSSID(bssid);
Serial.print("BSSID: ");
Serial.print(bssid[5], HEX);
Serial.print(":");
Serial.print(bssid[4], HEX);
Serial.print(":");
Serial.print(bssid[3], HEX);
Serial.print(":");
Serial.print(bssid[2], HEX);
Serial.print(":");
Serial.print(bssid[1], HEX);
Serial.print(":");
Serial.println(bssid[0], HEX);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.println(rssi);
// print the encryption type:
byte encryption = WiFi.encryptionType();
Serial.print("Encryption Type:");
Serial.println(encryption, HEX);
Serial.println();
}
void printWifiData() {
// print your WiFi shield's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
Serial.println(ip);
// print your MAC address:
byte mac[6];
WiFi.macAddress(mac);
Serial.print("MAC address: ");
Serial.print(mac[5], HEX);
Serial.print(":");
Serial.print(mac[4], HEX);
Serial.print(":");
Serial.print(mac[3], HEX);
Serial.print(":");
Serial.print(mac[2], HEX);
Serial.print(":");
Serial.print(mac[1], HEX);
Serial.print(":");
Serial.println(mac[0], HEX);
}
沒有留言:
張貼留言