AT command
Description
Parameter
Example
AT+CIPSTATUSKiểm tra trạng thái kết nAT + CIPSTATUS
AT+CIPSTART=, ,

Tạo 1 kết nối IP với AT+CIPMUX=0(chế độ kết nối đơn kênh)type:"TCP" /"UDP"address"IPaddress"port: TCP/UDP portAT+CIPSTART="TCP","192.168.3.10", 3000
AT+CIPSEND=truyền dữ liệu tới serverlen: độ dài dữ liệuAT+CIPSEND = 5>hello
AT+CIPCLOSEĐóng kết nối TCP/UDPAT+CIPCLOSE
AT+CIPSTART=,,, Tạo một kết nối IP với AT+CIPMUX = 1(chể độ kết nối đa kênh)id: 0-4type:"TCP"/"UDP"address"IPaddress"port:TCP/UDP portAT+CIPSTART=4,"TCP","192.168.3.10", 3000
AT+CIPSEND= , Truyền dữ liệu tới serverid: 0-4len: Độ dài dữ liệuAT+CIPSEND = 1,5> hello
AT+CIPCLOSE= Đóng kết nối TCP/UDPid: 0-4AT+CIPCLOSE = 1

Trong Clip sau sẽ hướng dẫn các bạn đưa dữ liệu lên website "thingspeak.com"( đóng vai trò là server) sử dụng module wifi esp8266. Các bạn hãy tìm hiểu kĩ hơn về " thingspeak.com" hay internet of thing (IOT) chúng sẽ giúp ích cho bạn rất nhiều.

Bạn đang xem: Hướng dẫn test module wifi esp8266 với máy tính phần 2

Chú thích trong Clip:

- Đăng kí một tài khoản trên website” thingspeak.com”

- Tạo một kênh để up dữ liệu lên

- Kết nối module Esp8266 với module Uart như làm ở phần 1

- Cấp nguồn cho module Esp8266

- Cấu hình Esp8266 là Station

AT+CWMODE=1

- Truy cập vào một mạng wifi

AT+CWJAP=”TÊN MẠNG”,“MẬT KHẨU”

- Cài đặt ESP8266 có thể kết nối được với nhiều kênh

AT+CIPMUX=1

( là kênh ESP8266 dùng để kế nối với thingspeak server, các bạn có thể dùng được các kênh từ 0-4)

- Gửi số liệu lên thingspeak server, tới kênh dữ liệu đã được tạo trên thingspeak, tại các Field1, Field 2…của kênh

GET / update?key=&=, kết thúc chuỗi kí tử phải có “\r\n” tương đương với việc truyền đi 2 byte 0x0D , 0x0A.

Trong đó:

Write API Key - mật mã để viết số liệu lênh 1 kênh của server, mỗi một kênh trên sever sẽ có một mật mã riêng.

fieldx là một trong các trường từ field1… field8

AT+CIPSEND=,

> “Chuỗi kí tự cần truyền đi “

Ví dụ, muốn truyền giá trị 12.5 lênh một kênh nào đó của server tại field1 thì chuỗi cần truyền đi sẽ là:

“GET /update?key=XOMM1M44L0ZHZE85&field1=12.5”

Để truyền được chuỗi này cần phải xác định được độ dài của chuỗi kí tự, ở ví dụ này là 46 kí tự (bạn nhớ cộng thêm 2 byte 0x0D và 0x0A)

AT+CIPSEND=3,46

> GET /update?key=XOMM1M44L0ZHZE85&field1=12.5

- Cuối cùng để đóng kết nối TCP

AT+CIPCLOSE

Các lệnh đối với IP server


AT command
Description
Parameter
Example
AT+CIPSERVER=1 <,

>

TCP server bắt đầu hoạt độngport: TCP portAT+CIPSERVER = 1.8001
AT+CIPSERVER=0TCP server ngắt kết nốiAT+CIPSERVER = 0
AT+CIPSTO=đặt thời gian timeout cho TCP servertimeout = 0-28800sAT+CIPSTO = 180
AT+CIPSTO?AT+CIPSTO?

Khi một TCP server bắt đầu hoạt động, nó có thể làm việc đồng thời với 5 kết nối

Chú ý:IP server chỉ có thể được bật trong chế độ AT + CIPMUX = 1


http://mlab.vn/(Phạm Tuấn Anh - MLAB )

Hướng dẫn test module wifi ESP8266 với máy tính (phần 1)
Hướng dẫn lập trình ESP8266 EVB (MLAB) dùng Arduino IDE
Hướng dẫn nạp Firmware AT cho ESP8266

Viết đánh giá

Họ và tên: Đánh giá của bạn: Lưu ý: Không hỗ trợ HTML! Bình chọn: Dở Hay Nhập mã bảo vệ:
*

Tiếp tục

Xin chào các bạn, mình đã quay trở lại rồi đây. Như đã nói ở bài trước bài hôm nay mình xin viết về việc cài đặt chương trình thiết lập kết nối vào mạng wifi cho ESP8266. Trong bài viết này mình vẫn sử dụng em wemos d1 mini như những bài trước.

*

Ý tưởng

Ý tưởng để gửi SSID và PASS của wifi cho ESP8266 là ESP8266 sẽ làm một server web cung cấp 1 API để máy tính gửi dữ liệu vào. Nhưng muốn máy tính truy cập được API đó thì nó phải được kết nối cùng mạng với ESP8266. ESP8266 thì không thể kết nối được bất kì mạng wifi nào rồi bởi vì mình đang thiết kế chương trình để kết nối wifi mà

*
. Vậy làm sao để ESP8266 có thể kết nối đến máy tính mà chính nó lại không thể kết nối wifi?

Bạn có thể nghĩ đến một phương án là cho ESP8266 kết nối đến wifi mặc định. Mỗi khi muốn cài đặt cho ESP8266 kết nối đến wifi khác thì máy tính phải phát một wifi mặc định cho ESP8266 kết nối đến rồi quá trình cài đặt diễn ra. Đây là một ý tưởng có thể thực hiện được nhưng nó lại khá là phức tạp để thực hiện nếu người dùng không biết cách cài đặt cho việc phát wifi từ máy tính.

Một ý tưởng khác được đặt ra là cho ESP8266 phát wifi để máy tính kết nối đến. Việc sử dụng máy tính để kết nối wifi thì ai ai cũng có thể làm được. Việc quan trọng là mình phải viết chương trình làm sao cho ESP8266 phát được wifi thôi. Để làm được việc này thì ESP8266 phải có chức năng phát wifi không thì sao có thể phát wifi được. Thật tuyệt vời ESP8266 có thể làm được điều đó. Nó có thể phát được wifi và đồng thời làm server web luôn.

Như vậy ý tưởng cho chương trình sẽ như sau:

ESP8266 phát một wifi với mật khẩu mặc định là "12345678" và đồng thời chạy web server cung cấp API nhận SSID và PASS của wifi. Máy tính sẽ kết nối đến wifi mà ESP8266 phát ra, truy cập vào địa chỉ IP của ESP8266 và gửi POST request yêu cầu ESP8266 kết nối đến wifi người dùng nhập vào.Chúng ta cũng phải viết thêm chức năng để chuyển giữa chế độ hoạt động bình thường và chế độ cài đặt nữa. Ý tưởng được phát biểu như sau: khi ESP8266 đang hoạt động bình thường, muốn vào chế độ cài đặt thì phải ấn và giữ 1 nút trên phần cứng khoảng 3s. Khi cài đặt xong thì sẽ về chế độ bình thường. Mà khi đang ở chế độ cài đặt muốn về chế độ hoạt động bình thường thì người dùng cũng phải ấn và giữ nút cài đặt khoảng 3s để chuyển chế độ.Thiết kế chương trình

Sơ đồ hoạt động của hệ thống sẽ như sau:

*

Khi hệ thống hoạt động bình thường ấn và giữ nút cài đặt 3s để vào trạng thái cài đặt. Khi ở trạng thái cài đặt ESP8266 sẽ phát ra 1 wifi với mật khẩu là "12345678". Đồng thời ESP8266 sẽ làm web server cung cấp API để truy cập vào. Máy tính sẽ kết nối với wifi ESP8266 do phát ra và sử dụng một giao diện web để truy cập API đến ESP8266. Và tiếp theo quá trình cài đặt sẽ diễn ra như sơ đồ bên trên.

Viết chương trình cho ESP8266

Chương trình viết cho ESP8266 lần này sẽ phức tạp hơn 1 chút nên mình sẽ chia thành các Service nhỏ. Chúng ta cần xây dựng các service sau:

EEPROM Service: Service này sẽ có nhiệm vụ đọc và ghi dữ liệu vào EEPROM. Nói qua về EEPROM một chút. EEPROM là một loại bộ nhớ của ESP8266. Nó có thể lưu mãi mãi không bị mất khi mất điện hoặc reset. Nó còn không thể mất khi nạp lại chương trình, rất thích hợp để lưu các dữ liệu lâu dài.Wifi Service: Service sẽ có nhiệm vụ giúp ESP8266 phát wifi và kết nối với wifi nhận được.Http
Server
H: Nhiệm vụ của Service này là giúp ESP8266 tạo một web server cung cấp các API. Mình thêm chữ H vì ESP8266 đã có một thư viện tên là Http
Server rồi.

Bây giờ chúng ta sẽ từng bước, từng bước tạo các Service đã được liệt kê ở bên trên.

Trong bài viết này mình sẽ sử dụng các thư viện:

Arduino
Json: 5.13

Đầu tiên sẽ là EEPROM Service.

EEPROM Service

Để thao tác với EEPROM ta sẽ sử dụng thư viện EEPROM của ESP8266. Tuy nhiên thư viện này chỉ thao tác với từng ô nhớ. Nhưng những giá trị cần lưu vào là các String do vậy cần phải viết các hàm thực hiện được điều đó. Service này sẽ có 4 hàm cơ bản sau:

write Hàm ghiread Hàm đọcclear Hàm xóa dùng để xóa các ô nhớ về giá trị 0commit Hàm commit để lưu những thay đổi vào EEPROM thật

void EEPRom
HClass::write(const String &data, int begin, int end
Max){ int end = data.length() + begin; if (end - 1 > end
Max) { ECHOLN("Service> Size too large"); return; } clear(begin, end
Max); for (int i = begin; i

WIFI Service

Wifi service sẽ có 2 hàm 3 hàm để thực hiện việc: kết nối wifi, lưu trữ wifi, phát wifi. Cụ thể như sau:

Kết nối wifi: có 2 hàm kết nối wifi. Một là lấy dữ liệu từ bộ nhớ EEPROM rồi kết nối, một hàm sẽ cho phép truyền ssid và pass từ bên ngoài vào để kết nối. Khi truyền từ bên ngoài vào nếu wifi kết nối thành công thì ssid và pass sẽ được lưu lại để sử dụng cho lần sau. Code của hàm kết nối sẽ như sau:

int Wifi
Service
Class::connect(){ ECHOLN("Service> Read wifi SSID and PASS from EEPROM"); String ssid = EEPROMH.read(EEPROM_WIFI_SSID_START, EEPROM_WIFI_SSID_END); String pass = EEPROMH.read(EEPROM_WIFI_PASS_START, EEPROM_WIFI_PASS_END); return connect(ssid, pass);}int Wifi
Service
Class::connect(const String &ssid, const String &pass, boolean is
New){ ECHOLN("Service> Open STA...."); ECHO("Service> Wifi connect to: "); ECHOLN(ssid); ECHO("Service> With pass: "); ECHOLN(pass); Wi
Fi.soft
APdisconnect(); Wi
Fi.disconnect(); Wi
Fi.mode(WIFI_STA); delay(100); Wi
Fi.begin(ssid.c_str(), pass.c_str()); ECHOLN("Waiting for Wifi to connect"); int c = 0; while (c Lưu wifi: Hàm này sẽ viết vào bộ nhớ và lưu lại. Địa chỉ cấp cho mỗi chuỗi ssid và pass là 20 byte tương đương với 20 ký tự.

void Wifi
Service
Class::store
Wifi(const String &ssid, const String &pass){ EEPROMH.write(ssid, EEPROM_WIFI_SSID_START, EEPROM_WIFI_SSID_END); EEPROMH.write(pass, EEPROM_WIFI_PASS_START, EEPROM_WIFI_PASS_END); EEPROMH.commit();}Phát wifi: Trước khi phát wifi cần phải ngắt hết mọi kết nối. Sau đó chuyển chế độ sang WIFI_AP để phát wifi.

void Wifi
Service
Class::setup
AP(){ ECHOLN("Service>AP> Open AP...."); Wi
Fi.soft
APdisconnect(); Wi
Fi.disconnect(); delay(3000); Wi
Fi.mode(WIFI_AP); Wi
Fi.soft
AP(WIFI_AP_SSID, WIFI_AP_PASSWORD); ECHO("Service>AP> Connect to wifi:"); ECHOLN(WIFI_AP_SSID); ECHO("Service>AP> Password:"); ECHOLN(WIFI_AP_PASSWORD); ECHOLN("Service>AP> Softap is running!"); IPAddress my
IP = Wi
Fi.soft
APIP(); ECHO("Service>AP> IP address: "); ECHOLN(my
IP);}Cuối cùng tạo object của class cho việc sử dụng: Wifi
Service
Class Wifi
Service;

Http
Server
H

Service này sẽ tạo Web Server và cung cấp API phục vụ cho việc kết nối. Tất nhiên là dữ liệu trao đổi sẽ là chuỗi json để dễ xử lý. ESP8266 có thư viện Arduino
Json để thực hiện parse các chuỗi json. Chúng ta sẽ sử dụng thư viện này để parse dữ liệu nhận được từ máy tính.

Sẽ có 3 hàm thực hiện API chính:

handle
Status
dùng để kiểm tra trạng thái của thiết bịhandle
Wifis
dùng để quét các wifi gần kề để gửi trả lại phía máy tínhhandle
Connect
To
dùng để nhận mật khẩu từ máy tính gửi đến và gọi hàm connect wifi.

Hàm tạo ESP8266Web
Server và on các request sẽ như sau:

void start
Config
Server() { if (server) { return; } ECHOLN("Server
H>Config
Server> Begin create new server..."); server = new ESP8266Web
Server(HTTP_PORT); server->on(F("/"), HTTP_GET, handle
Root); server->on(F("/status"), HTTP_GET, handle
Status); server->on(F("/wifis"), HTTP_GET, handle
Wifis); server->on(F("/connect-to"), HTTP_POST, handle
Connect
To); server->on(F("/"), HTTP_OPTIONS, handle
Ok); server->on(F("/status"), HTTP_OPTIONS, handle
Ok); server->on(F("/wifis"), HTTP_OPTIONS, handle
Ok); server->on(F("/connect-to"), HTTP_OPTIONS, handle
Ok); server->begin(); ECHOLN("Server
H>Config
Server> HTTP server started");}Lưu ý: Khi trình duyệt gửi request từ một địa chỉ khác (địa chỉ web giao diện tới địa chỉ ESP API là 2 địa chỉ khác nhau) thì trình duyệt sẽ gửi 1 OPTIONS REQUEST do vậy phải có các câu lệnh với methos là HTTP_OPTIONS cho tất cả các route được khai báo.

Chương trình chính

Hàm setup() sẽ chạy đầu tiên khi bật nguồn. Do vậy hàm này sẽ phải cài đặt chế độ của các chân (PIN) cần thiết, init Serial và thực hiện là đọc SSID và PASS wifi được lưu trong bộ nhớ và kết nối đến wifi đó.

void setup() { Serial.begin(SERIAL_BAUD_RATE); Serial.println("\n
Start up..."); pin
Mode(PIN_RESET, INPUT); pin
Mode(LED_BUILTIN, OUTPUT); Wifi
Service.connect();}Hàm loop() sẽ kiểm tra chế độ làm việc của thiết bị để thực hiện các hàm tương ứng. Ở chế độ hoạt động bình thường (NORMAL) sẽ luôn kiểm tra kết nối wifi. Nếu wifi chưa được kết nối thì sẽ thực hiện kết nối wifi đã được lưu trong bộ nhớ. Khi mà đã kết nối wifi thì sẽ hoạt động bình thường. Ở đây mình sẽ cho nháy led để biểu thị là thiết bị đang hoạt động bình thường. Còn khi ở chế độ SERVER thì tất nhiên sẽ chờ client kết nối đến rồi (handle
Client). Cuối cùng phải luôn luôn kiểm tra xem nút Setting có được bấm và giữ trong 3s hay không.

Xem thêm: Hướng Dẫn Đăng Ký 3G Mobifone Trọn Gói, Access Denied

void handle
Normal
Mode(){ if (Wi
Fi.status() == WL_CONNECTED) { // Thực hiện nháy led if(toggle
Timeout handle
Client(); }}void check
Button
Reset
Click(){ // Kiểm tra trạng thái của nút PIN_RESET và thời gian bấm nút if (digital
Read(PIN_RESET) == LOW && (setting
Timeout + SETTING_HOLD_TIME) Mã chương trình đầy đủ tại đây

Kết luận

Trên đây mình đã hướng dẫn các bạn tạo một chương trình để thực hiện việc cài đặt wifi cho ESP8266. Nếu có bất kì thắc mắc nào hoặc bị vướng mắc ở phần nào thì hãy để lại comment bên dưới nhé.

Cảm ơn các bạn đã đọc bài viết của mình! Hy vọng bài viết sẽ giúp ích được cho các bạn. Chúc các bạn thành công!