26
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

TEE ESP WiFi Arduino Library - Thaieasyelec · 1 TEE ESP WiFi Arduino Library TEE ESP WiFi Library คือ Library ที่เขียนขึ้นมาเพื่อใช้งานโมดูล

  • Upload
    others

  • View
    44

  • Download
    0

Embed Size (px)

Citation preview

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