範例說明
這個範例裡,我們使用Ameba來檢測周圍的WiFi訊號,並將檢測到WiFi的名稱,加密方式,信號強度等信息打印出來。
首先先確定天線已經接上,
接著確定板子是 Ameba, “Tools” -> “Board” -> “Arduino Ameba”
然後打開 Scan Networks 的範例, “File” -> “Examples” -> “AmebaWiFi” -> “ScanNetworks” :
上傳程式碼之後,按下Ameba的Reset按鈕, 這時候會看到**Scan Networks**下會有搜索到WiFi的數目以及每一個WiFi的訊息。
程式碼說明
1.首先使用的是顯示Ameba自己的物理地址WiFi.macAddress(mac):
https://www.arduino.cc/en/Reference/WiFiMACAddress
2.然後開始搜索周圍WiFi環境的WiFi.scanNetworks()
https://www.arduino.cc/en/Reference/WiFiScanNetworks
3.在打印WiFi具體訊息時使用到的有:
4.顯示WiFi的名稱WiFi.SSID(thisNet):
https://www.arduino.cc/en/Reference/WiFiSSID
5.顯示WiFi的訊號強度WiFi.RSSI(thisNet):
https://www.arduino.cc/en/Reference/WiFiRSSI
6.顯示WiFi的加密方式WiFi.encryptionType(thisNet):
https://www.arduino.cc/en/Reference/WiFiEncryptionType
https://www.arduino.cc/en/Reference/WiFiMACAddress
2.然後開始搜索周圍WiFi環境的WiFi.scanNetworks()
https://www.arduino.cc/en/Reference/WiFiScanNetworks
3.在打印WiFi具體訊息時使用到的有:
4.顯示WiFi的名稱WiFi.SSID(thisNet):
https://www.arduino.cc/en/Reference/WiFiSSID
5.顯示WiFi的訊號強度WiFi.RSSI(thisNet):
https://www.arduino.cc/en/Reference/WiFiRSSI
6.顯示WiFi的加密方式WiFi.encryptionType(thisNet):
https://www.arduino.cc/en/Reference/WiFiEncryptionType
與Arduino的差異
Arduino在完成WiFi的操作時,需要另外使用WiFi Shield來作為WiFi模塊,因此在使用WiFi是需要#include 來使用SPI與WiFi模塊進行通訊。
但是Ameba自身就具有WiFi模塊的功能,因此,不需要#include 。若想要使用Arduino的範例,要先刪掉這一項。
但是Ameba自身就具有WiFi模塊的功能,因此,不需要#include 。若想要使用Arduino的範例,要先刪掉這一項。
setup(){
printMacAddress();
}
重點是copy WiFi.macAddress(mac);
然後把答案放到 mac 這個 byte array
void printMacAddress() {
// the MAC address of your Wifi shield
byte mac[6];
// print your MAC address:
WiFi.macAddress(mac);
Serial.print("MAC: ");
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);
}
接下來看 loop
void loop() {
// scan for existing networks:
Serial.println("Scanning available networks...");
listNetworks();
delay(10000);
}
重點就是呼叫了 listNetworks(), 接下來看 listNetworks()
呼叫WiFi.scanNetworks() 得到ssid 的 num
然後用一個loop ...把所有的ssid 都掃出來
WiFi.SSID(thisNet) 會得到ssid...
WiFi.RSSI(thisNet) 會得到訊號的強度
WiFi.encryptionTypeEx(thisNet) 會得到加密的方式
WiFi.encryptionType(thisNet) 會得到加密的方式
void listNetworks() {
// scan for nearby networks:
Serial.println("** Scan Networks **");
int numSsid = WiFi.scanNetworks();
if (numSsid == -1) {
Serial.println("Couldn't get a wifi connection");
while (true);
}
// print the list of networks seen:
Serial.print("number of available networks:");
Serial.println(numSsid);
// print the network number and name for each network found:
for (int thisNet = 0; thisNet < numSsid; thisNet++) {
Serial.print(thisNet);
Serial.print(") ");
Serial.print(WiFi.SSID(thisNet));
Serial.print("\tSignal: ");
Serial.print(WiFi.RSSI(thisNet));
Serial.print(" dBm");
Serial.print("\tEncryptionRaw: ");
printEncryptionTypeEx(WiFi.encryptionTypeEx(thisNet));
Serial.print("\tEncryption: ");
printEncryptionType(WiFi.encryptionType(thisNet));
}
}
沒有留言:
張貼留言