範例說明
這個範例裡,我們使用 Ameba 連上 WiFi,作為 Server,與連接過來的 Client 進行對話。首先確定板子是 Ameba, “Tools” -> “Board” -> “Arduino Ameba”
然後打開 Simple WiFi Server的範例, “File” -> “Examples” -> “AmebaWiFi” -> “SimpleServerWiFi”
修改 ssid.. pass .. 和 status = WiFi.begin();
將 WiFi 連線的相關訊息進行修改,將下圖中黃色標註的地方進行對應的修改。
上傳程式碼之後,按下 Ameba 的 Reset 按鈕, 這時會看到 WiFi 連線後的信息。
在 laptop 上的 socket 工具上(本示例中使用的工具為 “sokit” )通過獲取的IP地址以及範例中設定的 port 5000 來進行連線。
選取 Client 模式,填寫 Server IP 和 port 信息,點擊 “TCP Connect”
連接成功后會顯示 ”A client connected to this Server”,以及Client的IP和port訊息。
從 Client 發送一個字串過來,Ameba收到後,會將這個字串再發給 Client。
從 Client 發送一個字串過來,Ameba收到後,會將這個字串再發給 Client。
客戶端會顯示收到這個字串。
程式碼說明
在連線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
顯示Ameba的IP信息WiFi.localIP()
https://www.arduino.cc/en/Reference/WiFiLocalIP
設定服務器的端口號WiFiServer server(5000)
https://www.arduino.cc/en/Reference/WiFiServer
開始服務器的監聽server.begin();
https://www.arduino.cc/en/Reference/WiFiServerBegin
判斷是否有客戶端連線server.available()
https://www.arduino.cc/en/Reference/WiFiServerAvailable
從Server讀取數據client.read()
https://www.arduino.cc/en/Reference/WiFiClientRead
對Server發送數據client.write()
https://www.arduino.cc/en/Reference/WiFiClientWrite
與Server斷開連線client.stop();
https://www.arduino.cc/en/Reference/WiFIClientStop
========================================================
code study
char ssid[] = "jacky"; // your network SSID (name)
char pass[] = "your pass"; // your network password
int keyIndex = 0; // your network key Index number (needed only for WEP)
int status = WL_IDLE_STATUS;
WiFiServer server(5000);
重點是
WiFiServer server(5000); -> port 5000
server.begin();
void setup() {
Serial.begin(9600); // initialize serial communication
pinMode(9, OUTPUT); // set the LED pin mode
// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
while (true); // don't continue
}
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 Network named: ");
Serial.println(ssid); // print the network name (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);
}
server.begin(); // start the web server on port 80
printWifiStatus(); // you're connected now, so print out the status
}
重點是
WiFiClient client = server.available();
char buffer[256]
void loop() {
WiFiClient client = server.available();
int n = client.read((uint8_t*)(&buffer[0]), sizeof(buffer));
n = client.write(buffer, n);
while (true) {
memset(buffer, 0, 256);
int n = client.read((uint8_t*)(&buffer[0]), sizeof(buffer));
if (n <= 0) break;
n = client.write(buffer, n);
if (n <= 0) break;
}
client.stop();
}
沒有留言:
張貼留言