tee esp wifi arduino library - thaieasyelec.com · 1 tee esp wifi arduino library tee esp wifi...
TRANSCRIPT
1
TEE ESP WiFi Arduino Library
TEE ESP WiFi Library คือ Library ที่เขียนข้ึนมาเพื่อใช้งานโมดลู Serial To WiFi ESP8226 โดยใช้ Software Serial ท าให้ใช้
งานกับ Arduino Uno ไดส้ะดวกมากขึ้น และ ต้องใช้กับ ESP8226 ที่ใช้ Firmware Version 0.9.2.2 เป็นต้นไป เนื่องจากเป็น
Version ที่มีการพัฒนาให้สามารถแก้ไข Baud Rate ได้ จึงท าให้สามารถปรับคา่ Baud Rate ให้เหมาะสมกับ Software Serial
ของ Arduino ได ้
หมายเหตุ:
- ส าหรับผู้ที่ใช้งาน ESP8226 ใน Version เก่าอยู่ สามารถ Update Firmware ให้เป็น Version 0.9.2.2 หรือ Version
ที่ใหม่กว่าได้ ดาวนโ์หลด Firmware Version 0.9.2.2 โดยศึกษาวิธกีาร Update Firmware และวิธีการปรับค่า Baud
Rate ได้จากบทความนี ้คลิกอ่านบทความ
- ลูกค้าสามารถ ดาวน์โหลด TEE ESP WiFi Library ได้ที่นี ่
ค าอธิบาย Function ใน TEE ESP WiFi Library
Function ESP(Rx,Tx,ENpin)
Description
คือการสร้าง object และ ตั้งช่ือ object
Parameters
Rx : ก าหนด Pin ขา Rx ของ Arduino ที่ต่อกับขา Tx ของ ESP8226
Tx: ก าหนด Pin ขา Tx ของ Arduino ที่ต่อกับขา Rx ของ ESP8226
Enpin: ก าหนด Pin ที่ต่อกับขา CH_PD ของ ESP8226
Function ESP. begin(Speed)
Description
ใช้ส าหรับก าหนดความเร็วในการรบั/ส่ง ข้อมูล ระหว่าง Arduino และ ESP8226
2
สามารถ ก าหนดค่าได้ดังนี้ 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 57600, และ
115200. แต่ที่แนะน าส าหรับการใช้งานคือ 9600 และไม่ควรก าหนดเกิน 19200
Parameters
Speed: ค่า Baud rate ที่ใช้
ESP.Event_debug
Description
ใช้ส าหรับ ก าหนด Address ของ Function เมื่อต้องการ แสดง Debug การท างาน
Function ESP.reset()
Description
ใช้ส าหรับ Reset โมดลู ESP8226
Function ESP.setmode(Mode)
Description
ใช้ส าหรับเลือกก าหนดโหมดการท างานให้กับ โมดูล ESP8226 โดยสามารถก าหนดได้ 3 โหมดด้วยกนัคือ STATION ,
AP , STATION_AP
Parameters
Mode: โหมดที่ต้องการก าหนด
STATION
AP
STATION_AP
3
Function ESP.listAP()
Description
ใช้ส าหรับสั่งให้โมดลู ESP8226 แสดงรายชื่อ Access Point ที่สแกนได้
และต้องใช้งานร่วมกับ ESP. Event_list_AP
ESP. Event_list_AP
Description
ใช้ส าหรับ ก าหนด Address ของ Function เมื่อต้องการ แสดงรายช่ือของ Access Point ที่สแกนได้
Function ESP.connectAP(String ap,String pwd)
Description
ใช้ส าหรับเชื่อมต่อ ESP8266 เข้ากับ Acces Point โดยก าหนดชื่อของ SSID และ Password
หากเชื่อมต่อส าเร็จ Function จะ Return ค่าออกมาเป็น True และไมส่ าเร็จ จะ Return ค่าออกมาเป็น False
Parameters
String ap: ก าหนด SSID
String pwd: ก าหนด Password
Function ESP. disconnectAP()
Description
ใช้ส าหรับหยดุเช่ือมต่อ ESP8266 เข้ากับ Acces Point หากหยดุเช่ือมต่อส าเรจ็ Function จะ Return ค่าออกมาเป็น
True และไม่ส าเรจ็ จะ Return คา่ออกมาเป็น False
Function ESP. multipleconnect(unsigned char mul)
Description
ใช้ส าหรับก าหนดการเชื่อมต่อแบบหลายการเช่ีอมต่อ มักจะใช้กับรว่มกับการก าหนดใหE้SP8266 ท างานเป็น Server
โหมด หากตั้งค่าส าเร็จ Function จะ Return ค่าออกมาเป็น True และไม่ส าเร็จ จะ Return ค่าออกมาเป็น False
4
Parameters
unsigned char mul: ก าหนดเป็น SINGLE หรือ MULTIPLE
Function ESP.myip()
Description
ใช้ส าหรับแสดงค่า IP ของโมดูล ESP8266 โดย Function จะ Return ค่า IP ออกมาเป็น ตัวแปล String และ แสดงผล
ออกทาง ESP.Event_debug ด้วย
Function ESP. startclient(String type,String add,String port)
Description
ใช้ส าหรับก าหนดค่าเริม่ต้นการใช้งาน Client Mode ในกรณีที่ก าหนด ESP. multipleconnect เป็น SINGLE โดย
Function จะ Return ค่า True ออกมาเมื่อการตั้งค่าส าเร็จ และ จะ Return ค่า False ออกมาเมื่อการตั้งค่าไม่ส าเร็จ
Parameters
String type: ก าหนดรูปแบบของการเชื่อมต่อ เป็น “TCP” หรือ “udp”
String add: ก าหนด Address ของ Server ที่ต้องการเช่ือมต่อ
String port: ก าหนด Port ที่ใช้เชื่อมต่อกับ Server
Function ESP.startclient(unsigned char id,String type,String add,String port)
Description
ใช้ส าหรับก าหนดค่าเริม่ต้นการใช้งาน Client Mode ในกรณีที่ก าหนด ESP. multipleconnect เป็น MULTIPLE โดย
Function จะ Return ค่า True ออกมาเมื่อการตั้งค่าส าเร็จ และ จะ Return ค่า False ออกมาเมื่อการตั้งค่าไม่ส าเร็จ
5
Parameters
unsigned char id: id ของ Socket ที่เช่ือมต่อก าหนดเป็นเลข 0-4
String type: ก าหนดรูปแบบของการเชื่อมต่อ เป็น “TCP” หรือ “udp”
String add: ก าหนด Address ของ Server ที่ต้องการเช่ือมต่อ
String port: ก าหนด Port ที่ใช้เชื่อมต่อกับ Server
Function ESP.startserver(String port)
Description
ใช้ส าหรับก าหนดค่าเริม่ต้นการใช้งาน Server Mode โดย Function จะ Return ค่า True ออกมาเมื่อการตั้งค่าส าเร็จ
และ จะ Return ค่า False ออกมาเมื่อการตั้งค่าไมส่ าเร็จ
Parameters
String port: ก าหนด Port ที่ใช้เป็น Server
Function ESP.stop()
Description
ใช้ส าหรับหยดุการเชื่อมต่อในกรณี TCP และ UDP โดย Function จะ Return ค่า True ออกมาเมื่อปิดส าเร็จ และ
จะ Return ค่า False ออกมาเมื่อการปิดไม่ส าเร็จ
Function ESP.stop(unsigned char id)
Description
ใช้ส าหรับหยดุการเชื่อมต่อในกรณี TCP และ UDP แบบก าหนด ID Socket โดย Function จะ Return ค่า True
ออกมาเมื่อปิดส าเรจ็ และ จะ Return ค่า False ออกมาเมื่อการปิดไม่ส าเร็จ
6
Parameters
unsigned char id: id ของ Socket ที่ต้องการปิด ก าหนดเป็นเลข 0-4
Function ESP.setAP(String ssid,String pwd,unsigned char ch,unsigned char ecn)
Description
ใช้ส าหรับก าหนดช่ือ SSID , Password , Channel และ ชนิด Encryption ใช้ในกรณีที่ตั้งค่าใช้งาน ESP.setmode
เป็น AP หรือ STATION_AP โดย Function จะ Return ค่า True ออกมาเมื่อการตั้งค่าส าเร็จ และ จะ Return ค่า False
ออกมาเมื่อการตั้งค่าไมส่ าเร็จ
Parameters
String ssid: ตั้งช่ือ SSID ของโมดูล ESP8266
String pwd: ตั้ง Password ส าหรับให้ Client Login
unsigned char ch: ก าหนด Channel
unsigned char ecn: ก าหนด Encryption ที่ใช้ได้ดังนี้
- OPEN
- WEP
- WPA_PSK
- WPA2_PSK
- WPA_WPA2_PSK
Function ESP. print(String str) และ println(String str)
Description
ใช้ส าหรับส่ง String ออกไปทาง TCP และ udp ในกรณีที่ก าหนด ESP. multipleconnect เป็น SINGLE โดย
Function จะ Return ค่า True ออกมาเมื่อการส่งส าเร็จ และ จะ Return ค่า False ออกมาเมื่อการส่งไม่ส าเร็จ
println จะมีการส่งค่า 0x0A และ 0x0D ตาม String ที่ส่งไปทุกครั้ง เพ่ือข้ึนบรรทัดใหม ่
7
Parameters
String str: String ที่ต้องการส่ง
Function ESP. print(unsigned char id , String str) และ println(unsigned char id,String str)
Description
ใช้ส าหรับส่ง String ออกไปทาง TCP และ udp แบบก าหนด ID ของ Socket ในกรณีที่ก าหนด ESP.
multipleconnect เป็น MULTIPLE โดย Function จะ Return คา่ True ออกมาเมื่อการส่งส าเร็จ และ จะ Return ค่า False
ออกมาเมื่อการส่งไมส่ าเร็จ
println จะมีการส่งค่า 0x0A และ 0x0D ตาม String ที่ส่งไปทุกครั้ง เพ่ือข้ึนบรรทัดใหม ่
Parameters
unsigned char id: ID ของ Socket ที่ต้องการส่ง ก าหนดเป็นเลข 0-4
String str: String ที่ต้องการส่ง
Function ESP.write(unsigned char id,char *data,int len)
Description
ใช้ส าหรับส่ง Data ออกไปทาง TCP และ udp แบบก าหนด ID ของ Socketโดย Function จะ Return ค่า True
ออกมาเมื่อการส่งส าเร็จ และ จะ Return ค่า False ออกมาเมื่อการส่งไม่ส าเร็จ
Parameters
unsigned char id: ID ของ Socket ที่ต้องการส่ง ก าหนดเป็นเลข 0-4
char *data: pointer ของ Data
int len: จ านวน Data ที่ต้องการส่ง
8
Function ESP.write_HTML(unsigned char id,char *data)
Description
ใช้ส าหรับส่ง HTML Code ใน Application Web Server โดย Function จะ Return ค่า True ออกมาเมื่อการส่ง
ส าเรจ็ และ จะ Return ค่า False ออกมาเมื่อการส่งไมส่ าเรจ็
Parameters
unsigned char id: ID ของ Socket ที่ต้องการส่ง ก าหนดเป็นเลข 0-4
char *data: pointer ของ Data
Function ESP.String readstringdata()
Description
ใช้ส าหรับอ่านค่า String data ที่ได้รับมาจาก TCP และ udp โดย Function จะ Return String ออกมาในรูปแบบ ตัว
แปร String
ESP.currentID
Description
ตัวแปรที่เก็บ ID ของ Socket ล่าสุดที่ส่ง Data เข้ามาทาง TCP และ udp
Function ESP.write(char c)
Description
ใช้ส่ง Data ไปให้กับโมดูล ESP8266
Parameters
char c: Data ที่ส่ง
9
Function ESP.read()
Description
ใช้อ่าน Data ที่ได้รับจากโมดลู ESP8266 โดย Function จะ Return ค่าที่รับเข้ามาในรูปแบบตัวแปร int
Function ESP. available ()
Description
ใช้อ่านจ านวน Byte ที่ไดร้ับจากโมดูล ESP8266 โดย Function จะ Return ค่าจ านวน Byte ที่รับเข้ามาในรูปแบบตัว
แปร int
Function ESP. find (char *str)
Description
ใช้ค้นหา Data ที่เข้ามาทาง หาก พบข้อความ หรือ อักษร ตรงกับคา่ที่ต้องค้นหา
Function จะ Return ค่าออกมาเป็น True
Parameters
char *str: Data ทีต่้องการค้นหา
10
วิธีต่อโมดูล ESP8266 เข้ากับ Arduino UNO R3
ตัวอย่างโปรแกรม List Access Point
#include<TEE_ESP_WIFI.h>
#include <SoftwareSerial.h>
#define pinEN 9
#define ESP_Rx 10
#define ESP_Tx 11
ESP wifi(ESP_Rx,ESP_Tx,pinEN); // บรรทดัท่ี 1 void print_debug(String data) // บรรทดัท่ี 2 {Serial.print(data);} // บรรทดัท่ี 3 void setup()
{
Serial.begin(9600); // บรรทดัท่ี 4 wifi.begin(9600); // บรรทดัท่ี 5 Serial.println("ESP8226"); // บรรทดัท่ี 6 wifi.Event_debug = print_debug; // บรรทดัท่ี 7 wifi.reset(); // บรรทดัท่ี 8 wifi.setmode(STATION); // บรรทดัท่ี 9 wifi.Event_list_AP = print_debug; // บรรทดัท่ี 10 wifi.listAP(); // บรรทดัท่ี 11 }
void loop()
{}
11
ค าอธิบายโปรแกรม
บรรทัดท่ี 1 ตั้งช่ือ object ว่า wifi และ ก าหนดให้ขา Rx = Pin10 , Tx = Pin11 , CH_PD = Pin9
บรรทัดท่ี 2 Function ส าหรับรองรับ การแสดงผล Debug Function นี้จะไม่ท างานจนกว่าจะมีการก าหนด Address
ช้ีมายังFunction นี้ ในที่บรรทัดท่ี 7
บรรทัดท่ี 3 รับค่า Debug จาก ตัวแปร data ส่งออกไปแสดงผลที่ Serial port
บรรทัดท่ี 4 ก าหนดให้ ติดต่อกับ ESP8266 ที่ Baud Rate 9600
บรรทัดท่ี 5 ก าหนดให้ ติดต่อกับ Serial Port ที่ Baud Rate 9600
บรรทัดท่ี 6 ส่งข้อความ “ESP8266” ออกไปแสดงผลทาง Serial Port
บรรทัดท่ี 7 ก าหนด Address ของ Function ที่ใช้แสดงค่า Debug ไปท่ี Function
void print_debug(String data)
บรรทัดท่ี 8 สั่ง Reset Module ESP8266
บรรทัดท่ี 9 ก าหนดให้ Module ESP8266 ท างานในโหมด STATION
บรรทัดท่ี 10 ก าหนด Address ของ Function ที่ใช้แสดงค่ารายชื่อ Access Point ไปท่ี Function
void print_debug(String data)
บรรทัดท่ี 11 สั่งให้แสดงรายชื่อ Access Point
12
ผลการ Run Program
13
ตัวอย่างโปรแกรม TCP Client
#include<TEE_ESP_WIFI.h>
#include <SoftwareSerial.h>
#define pinEN 9
#define ESP_Rx 10
#define ESP_Tx 11
String ssid="stk";
String pass="stk123456";
String serverip="192.168.1.37";
String port="8000";
long previousMillis = 0;
long interval = 1000;
ESP wifi(ESP_Rx,ESP_Tx,pinEN); // บรรทดัท่ี 1 void print_debug(String data) // บรรทดัท่ี 2 { Serial.print(data);} // บรรทดัท่ี 3 void setup()
{
Serial.begin(9600); // บรรทดัท่ี 4 wifi.begin(9600); // บรรทดัท่ี 5 Serial.println("ESP8226"); // บรรทดัท่ี 6 wifi.Event_debug = print_debug; // บรรทดัท่ี 7 wifi.reset(); // บรรทดัท่ี 8 wifi.setmode(STATION); // บรรทดัท่ี 9 wifi.disconnectAP(); // บรรทดัท่ี 10 wifi.connectAP(ssid,pass); // บรรทดัท่ี 11 wifi.multipleconnect(SINGLE); // บรรทดัท่ี 12 String ip = wifi.myip(); // บรรทดัท่ี 13 wifi.startclient("TCP",serverip,port); // บรรทดัท่ี 14 }
void loop()
{
if(!wifi.print("Test EPS8226")) // บรรทดัท่ี 15 {
wifi.stop(); // บรรทดัท่ี 16 wifi.startclient("TCP",serverip,port); // บรรทดัท่ี 17 }
}
14
ค าอธิบาย
บรรทัดท่ี 1 ตั้งช่ือ object ว่า wifi และ ก าหนดให้ขา Rx = Pin10 , Tx = Pin11 , CH_PD = Pin9
บรรทัดท่ี 2 Function ส าหรับรองรับ การแสดงผล Debug Function นี้จะไมท่ างานจนกว่าจะมีการก าหนด Address
ช้ีมายัง Function นี้ ในที่บรรทัดท่ี 7
บรรทัดท่ี 3 รับค่า Debug จาก ตัวแปร data ส่งออกไปแสดงผลที่ Serial port
บรรทัดท่ี 4 ก าหนดให้ ติดต่อกับ ESP8266 ที่ Baud Rate 9600
บรรทัดท่ี 5 ก าหนดให้ ติดต่อกับ Serial Port ที่ Baud Rate 9600
บรรทัดท่ี 6 ส่งข้อความ “ESP8266” ออกไปแสดงผลทาง Serial Port
บรรทัดท่ี 7 ก าหนด Address ของ Function ที่ใช้แสดงค่า Debug ไปท่ี Function
void print_debug(String data)
บรรทัดท่ี 8 สั่ง Reset Module ESP8266
บรรทัดท่ี 9 ก าหนดให้ Module ESP8266 ท างานในโหมด STATION
บรรทัดท่ี 10 ให้ Disconnect ออกจาก AP ที่เคย Join ก่อนหน้าน้ี
บรรทัดท่ี 11 ให้ Join ไปยัง AP ช่ือ และ Password ตามที่ เก็บไว้ในตัวแปร ssid และ pass
บรรทัดท่ี 12 ก าหนดให้ ใช้การเช่ือมต่อแบบ SINGLE
บรรทัดท่ี 13 เรียกดู IP ที่โมดูลได้รบั
บรรทัดท่ี 14 เชื่อมต่อไปยัง TCP ไปยัง Server หมายเลข IP และ Port ที่ก าหนดในตัวแปร serverip และ port
บรรทัดท่ี 15 สง่ข้อความ "Test ESP8226" ไปยัง Server
บรรทัดท่ี 16 หากส่งข้อความส าเร็จ ให้ หยดุการเช่ือมต่อ
บรรทัดท่ี 17 เปิดการเชื่อมต่ออีกครั้ง
โปรแกรมจะวน Loop ในบรรทัดที่ 15,16,17ไปเรื่อยๆ
15
วิธีการทดลอง
- แก้ค่าตัวแปรเหล่านี้ใน Arduino ให้ตรงกับระบบ Network ที่ผู้ทดลองใช้ ในตัวอย่างน้ีจะเป็นการตัง้ค่าตามระบบ Network ดัง
รูปภาพ
String ssid="stk";
String pass="stk123456";
String serverip="192.168.1.37";
String port="8000";
- Download Program Hercules : http://new.hwg.cz/files/download/sw/version/hercules_3-2-8.exe
- เปิดโปรแกรม Hercules แล้วไปที่ Tab TCP Server
- ก าหนด Port = 8000 และ ก็ปุม่ Listen
16
- Upload Program ลงใน Arduino
- เปิด Serial Monitor บน Arduino IDE
ผลการ Run Program
ตัวอย่างโปรแกรม TCP Server
#include<TEE_ESP_WIFI.h>
#include <SoftwareSerial.h>
#define pinEN 9
#define ESP_Rx 10
#define ESP_Tx 11
String ssid="stk";
String pass="stk123456";
String port="8000";
ESP wifi(ESP_Rx,ESP_Tx,pinEN); // บรรทดัท่ี 1 void print_debug(String data) // บรรทดัท่ี 2 {Serial.print(data);} // บรรทดัท่ี 3
void setup()
{
Serial.begin(9600); // บรรทดัท่ี 4 wifi.begin(9600); // บรรทดัท่ี 5 Serial.println("EPS8226"); // บรรทดัท่ี 6 wifi.Event_debug = print_debug; // บรรทดัท่ี 7 wifi.reset(); // บรรทดัท่ี 8
17
wifi.setmode(STATION); // บรรทดัท่ี 9 wifi.disconnectAP(); // บรรทดัท่ี 10
wifi.connectAP(ssid,pass); // บรรทดัท่ี 11 wifi.multipleconnect(MULTIPLE); // บรรทดัท่ี 12 wifi.startserver("8000"); // บรรทดัท่ี 13 String ip = wifi.myip(); // บรรทดัท่ี 14 }
String data="";
void loop()
{
if(wifi.available()) // บรรทดัท่ี 15 {
Serial.write(wifi.read()); // บรรทดัท่ี 16 }
if(Serial.available()) // บรรทดัท่ี 17 {
char input = Serial.read(); // บรรทดัท่ี 18 data += input; // บรรทดัท่ี 19 if(input==0x0D) // บรรทดัท่ี 20 {
wifi.print(0,data); // บรรทดัท่ี 21 data=""; // บรรทดัท่ี 22 }
}
}
ค าอธิบาย
บรรทัดท่ี 1 ตั้งช่ือ object ว่า wifi และ ก าหนดให้ขา Rx = Pin10 , Tx = Pin11 , CH_PD = Pin9
บรรทัดท่ี 2 Function ส าหรับรองรับ การแสดงผล Debug Function นี้จะไม่ท างานจนกว่าจะมีการก าหนด Address
ช้ีมายังFunction นี้ ในที่บรรทัดท่ี 7
บรรทัดท่ี 3 รับค่า Debug จาก ตัวแปร data ส่งออกไปแสดงผลที่ Serial port
บรรทัดท่ี 4 ก าหนดให้ ติดต่อกับ ESP8266 ที่ Baud Rate 9600
บรรทัดท่ี 5 ก าหนดให้ ติดต่อกับ Serial Port ที่ Baud Rate 9600
บรรทัดท่ี 6 ส่งข้อความ “ESP8266” ออกไปแสดงผลทาง Serial Port
บรรทัดท่ี 7 ก าหนด Address ของ Function ที่ใช้แสดงค่า Debug ไปท่ี Function
void print_debug(String data)
18
บรรทัดท่ี 8 สั่ง Reset Module ESP8266
บรรทัดท่ี 9 ก าหนดให้ Module ESP8266 ท างานในโหมด STATION
บรรทัดท่ี 10 ให้ Disconnect ออกจาก AP ที่เคย Join ก่อนหน้าน้ี
บรรทัดท่ี 11 ให้ Join ไปยัง AP ช่ือ และ Password ตามที่ เก็บไว้ในตัวแปร ssid และ pass
บรรทัดท่ี 12 ก าหนดให้ ใช้การเช่ือมต่อแบบ MULTIPLE
บรรทัดท่ี 13 ก าหนดให้ท างานเป็น Server ใช้ Port 8000
บรรทัดท่ี 14 เรียกดู IP ที่โมดูลได้รบั
บรรทัดท่ี 15 ตรวจสอบว่ามี Data เข้ามาทาง WiFi หรือไม ่
บรรทัดท่ี 16 ถ้ามี Data เข้ามาให้ส่ง Data ออกไปแสดงผลทาง Serial Port
บรรทัดท่ี 17 ตรวจสอบว่ามี Data เข้ามาทาง Serial หรือไม ่
บรรทัดท่ี 18 ถ้ามีให้อ่าน แล้วเก็บไว้ใน ตัวแปร input
บรรทัดท่ี 19 น าค่าในตัวแปร input ไปเก็บไว้ในตัวแปร data เพื่อรวมเป็นข้อความ
บรรทัดท่ี 20 ตรวจสอบว่าค่าตัวแปร input มีค่าเท่ากับ 0x0D หรือไม ่
บรรทัดท่ี 21 ถ้าใช่ให้ส่งข้อความที่เก็บไว้ในตัวแปร data ออกไปทาง WiFi
บรรทัดท่ี 22 เคลียร์ตัวแปร data ให้ว่าง
19
วิธีการทดลอง
- แก้ค่าตัวแปรเหล่านี้ใน Arduino ให้ตรงกับระบบ Network ที่ผู้ทดลองใช้ ในตัวอย่างน้ีจะเป็นการตัง้ค่าตามระบบ Network ดัง
รูปภาพ
String ssid="stk";
String pass="stk123456";
String port="8000";
- Upload Program ลงใน Arduino
- เปิด Serial Monitor บน Arduino IDE
20
- เปิดโปรแกรม Hercules แล้วไปท่ี Tab TCP Client
- ก าหนด IP ไปท่ี IP ของ ESP8266 และ ก าหนด Port ไปท่ี Port เดียวกับ Server จากนั้นกดปุ่ม Connect
- ทดลอง ส่งข้อความ จาก Server ไป Client โดย พิมพ์ข้อความ แล้วกด Send (ต้องตั้ง Both NL&CR ในกรอบด้วย)
21
- ข้อความจะไปแสดงที่ Client
- ทดลอง ส่งข้อความ จาก Client ไป Server
ผลการ Run Program
22
ตัวอย่างโปรแกรม ให้ ESP8266 เป็น Access Point และ TCP Server ควบคุม LED
#include<TEE_ESP_WIFI.h>
#include <SoftwareSerial.h>
#define pinEN 9
#define ESP_Rx 10
#define ESP_Tx 11
#define LED 7
String ssid="My_AP_EPS8266";
String pwd ="12345678";
ESP wifi(ESP_Rx,ESP_Tx,pinEN); //บรรทดัท่ี1 void print_debug(String data) //บรรทดัท่ี2 {Serial.print(data);} //บรรทดัท่ี3
void setup()
{
pinMode(LED, OUTPUT); //บรรทดัท่ี4 digitalWrite(LED,LOW); //บรรทดัท่ี5 Serial.begin(9600); //บรรทดัท่ี6 wifi.begin(9600); //บรรทดัท่ี7 Serial.println("ESP8226"); //บรรทดัท่ี8 wifi.Event_debug = print_debug; //บรรทดัท่ี9 wifi.reset(); //บรรทดัท่ี10 wifi.setmode(STATION_AP); //บรรทดัท่ี11 if(wifi.setAP(ssid,pwd,1,WPA_WPA2_PSK)) //บรรทดัท่ี12 {
wifi.multipleconnect(MULTIPLE); //บรรทดัท่ี13 wifi.startserver("8000"); //บรรทดัท่ี14 String ip = wifi.myip(); //บรรทดัท่ี15 }
}
void loop()
{
String data = wifi.readstringdata(); //บรรทดัท่ี16 if(data.length()) //บรรทดัท่ี17 {
if(data=="LED ON") //บรรทดัท่ี18 {
digitalWrite(LED,HIGH); //บรรทดัท่ี19 }
if(data=="LED OFF") //บรรทดัท่ี20 {
digitalWrite(LED,LOW); //บรรทดัท่ี21 }
Serial.println(data); //บรรทดัท่ี22 }
}
23
ค าอธิบาย
บรรทัดท่ี 1 ตั้งช่ือ object ว่า wifi และ ก าหนดให้ขา Rx = Pin10 , Tx = Pin11 , CH_PD = Pin9
บรรทัดท่ี 2 Function ส าหรับรองรับ การแสดงผล Debug Function นี้จะไม่ท างานจนกว่าจะมีการก าหนด Address
ช้ีมายังFunction นี้ ในที่บรรทัดท่ี 7
บรรทัดท่ี 3 รับค่า Debug จาก ตัวแปร data ส่งออกไปแสดงผลที่ Serial port
บรรทัดท่ี 4 ก าหนดให้ขา Pin7 ที่ต้อกับ LED เป็น Output
บรรทัดท่ี 5 ก าหนดให้ขา Pin7 ที่ต้อกับ LED เป็น Low (LED ดับ)
บรรทัดท่ี 6 ก าหนดให้ ติดต่อกับ ESP8266 ที่ Baud Rate 9600
บรรทัดท่ี 7 ก าหนดให้ ติดต่อกับ Serial Port ที่ Baud Rate 9600
บรรทัดท่ี 8 ส่งข้อความ “ESP8266” ออกไปแสดงผลทาง Serial Port
บรรทัดท่ี 9 ก าหนด Address ของ Function ที่ใช้แสดงค่า Debug ไปท่ี Function
void print_debug(String data)
บรรทัดท่ี 10 สั่ง Reset Module ESP8266
บรรทัดท่ี 11 ก าหนดให้ Module ESP8266 ท างานในโหมด STATION_AP
บรรทัดท่ี 12 ตั้งค่า SSID ,Password ชนิด Encryption
บรรทัดท่ี 13 ก าหนดให้ ใช้การเช่ือมต่อแบบ MULTIPLE
บรรทัดท่ี 14 ก าหนดให้ท างานเป็น Server ใช้ Port 8000
บรรทัดท่ี 15 เรียกดู IP ที่โมดูลได้รบั
บรรทัดท่ี 16 อ่านค่าที่รับเข้ามาจาก WiFi
บรรทัดท่ี 17 ตรวจสอบว่ามี Data เข้ามาหรือไม่จากการเช็คจ านวนของdata
บรรทัดท่ี 18 ตรวจสอบ Data ที่เข้ามา ตรงกับค าว่า “LED ON”หรือไม ่
บรรทัดท่ี 19 ถ้าตรงให้สั่ง LED ON
บรรทัดท่ี 20 ตรวจสอบ Data ที่เข้ามา ตรงกับค าว่า “LED OFF”หรือไม ่
24
บรรทัดท่ี 21 ถ้าตรงให้สั่ง LED OFF
บรรทัดท่ี 22 แสดง Data ที่เข้ามาทาง Serial Port
วิธีการทดลอง ให้ ESP8266 เป็น Access Point และ TCP Server ควบคุม LED
- ต่อวงจรดังรูป
- Upload Program ลงใน Arduino
- เปิด Serial Monitor บน Arduino IDE
25
- ใช้ Smart Phone (iOS, Android) ติดตั้ง Program ที่สามารถ รบั/ส่ง TCP ได้ ในการทดลอง น้ีจะใช้ iOS เป็นอปุกรณ์ทดลอง
โดย ตดิตั้ง โปรแกรม TCP test tool จาก App Store
- เชื่อมต่อ Smart phone เข้ากับ AP ที่ ESP8266 สร้างขึ้น
26
- เปิด Program TCP test tool ตังค่า IP และ Port
-พิมพ์ “LED ON” และ “LED OFF” แล้วกด Send
ผลการ Run Program
- LED สามารถ On / Off ได้ตามค าสั่ง
ดูวิดีโอสาธิตการทดลองเพิ่มเติมไดท้ี่ : http://www.youtube.com/watch?v=nMQL3JIWF8o