1.Tổng quan
Wi-Fi viết tắt từ Wireless Fidelity hay Mạng 802.11 is your system mạng không dây usage sóng vô tuyến , same as điện thoại di động , truyền hình and đài phát thanh .
Connections Wifi dựa trên kết nối chuẩn IEEE 802.11 và chủ yếu là hiện sóng Wifi hoạt động trên băng tần 54 Mbps và có tín hiệu mạnh nhất trong khoảng cách 100 feet (gần 31 mét, bạn phải thử hình tượng mỗi 1 Tầng trung bình là 4 mét, theo lý thuyết sóng phát sóng ở tầng 1 sẽ vẫn được bắt đầu nếu bạn đang ở tầng 7 - theo lý thuyết). Còn trong thực tế, trong mỗi ngôi nhà có rất nhiều sóng địa hình, bạn nên chỉ cần đứng trên tầng 4 hoặc 5 là tín hiệu yếu lắm rồi.
2. Nguyên tắc hoạt động của wifi
Vâng, rất đơn giản, để có sóng Wifi, chúng ta cần phải có bộ phát Wifi - chính là các thiết bị như modem, router. Input, signal Internet source (được cung cấp bởi các công ty ISP như FPT, Viettel, VNPT, CMC ... hiện nay). Modem thiết bị, bộ định tuyến sẽ lấy Internet tín hiệu qua kết nối và chuyển sang vô tuyến tín hiệu và gửi đến các thiết bị sử dụng như điện thoại thông minh, bảng tính, máy tính xách tay ... Đây là quá trình nhận tín hiệu Không dây (hoặc còn gọi là adaptor) - chính là thẻ wifi trên máy tính xách tay, điện thoại ... và chuyển đổi Internet thành tín hiệu. This is complete to be able to reverse back, nghĩa là router, modem nhận tín hiệu vô tuyến từ adaptor và giải mã chúng, gửi qua Internet.
TÌM HIỂU VỀ MODULE WIFI ESP8266
1: Giới thiệu về chip dòng Wifi ESP8266.
Chip ESP8266 được phát triển bởi Espressif để cung cấp giao thức Wifi pháp cho các thiết bị IoT. The special points of the ESP8266 is most on the RF circuits with the balun, antenna switch, TX power amplifier and RX filter within the chip with small size only 5x5mm, nên các bảng ESP8266 không cần phải lớn lên bảng As need more messages. Other ra, the value of ESP8266 also very least enough to attraction the IoT products.
2: Module ESP8266 có chức năng chính sau:
Ø Hỗ trợ chuẩn 802.11 b / g / n
Ø WiFi 2.4 Ghz, hỗ trợ WPA / WPA2
Ø Electric voltage 3.3v (do not connect 5v nhé)
Ø Trao đổi chuẩn UART với tốc độ Baud lên đến 115200
Ø Có 3 chế độ hoạt động: Client, Acesspoint, Both /
Ø Hỗ trợ chuẩn bảo mật như: WEP, WPA_PSK, WPA2_PSK
Ø Giao thức TCP, UDP
3: The hardware circuit chip ESP8266 có thể bị tắt như sau:
V
Sử dụng lõi MCU 32-bit có tên là Tensilica
V
Tốc độ đồng hồ hệ thống có thể đặt ở 80MHz hoặc 160MHz
V
Unsupported flash memory to save a program
V
Tích hợp 50KB RAM để lưu ứng dụng dữ liệu khi chạy
V
Có đầy đủ các giao tiếp truyền thống như 17 GPIO, 1 SDIO Slave, 3 SPI, 1 I2C, 1 I2S, 2 UART, 2 PWM
V
Tích hợp mạch RF để truyền dữ liệu với tần số 2.4GHz
V
Hỗ trợ các gói IP truyền động hoạt động ở mức hardware như Acknowledgement, Fragmentation and Defragmentation, Aggregation, Frame Encapsulation vv ... (và phần stack TCP / IP sẽ được thực hiện trên phần mềm của ESP8266)
Do không hỗ trợ bộ nhớ flash nên bảng điều khiển ESP8266 phải gắn thêm chip Flash bên ngoài và thường là Flash SPI để ESP8266 có thể đọc chương trình ứng dụng với chuẩn SDIO hoặc SPI.
· Wifi 802.11 b / g / n
· Wifi 2,4 GHz, hỗ trợ WPA / WPA2
· Chuẩn điện áp activity 3.3V
· Chuẩn nối tiếp nối UART với tốc độ Baud lên đến 115200
· Có 3 modes activity: Client, Access Point, Cả hai Client và Access Point
· Hỗ trợ chuẩn bảo mật như: OPEN, WEP, WPA_PSK, WPA2_PSK, WPA_WPA2_PSK
· Hỗ trợ cả 2 giao tiếp TCP and UDP
· Tích hợp công suất CPU thấp 32 bit có thể được sử dụng như ứng dụng xử lý bộ vi xử lý
· SDIO 1.1 / 2.0, SPI, UART
· Working as the servers can be connect with 5 máy con
V Complete full nguyên nguyên cho ESP8266:
5: Tính năng.
Ø
Sử dụng nguồn 3.3v
Ø
Tích hợp dấu vết PCB trên mô đun
Ø
Tiêu chuẩn wifi: 802.11b / g / n, với mật khẩu bảo vệ mật khẩu và bảo mật WPA2 / WPA2 tần số 2.4GHz
Ø
Khoảng giữa chân 2mm
6: Sơ đồ.
V Chân nối:
·
URXD (RX) - dùng để nhận tín hiệu trong giao tiếp UART với bộ điều khiển
·
VCC - đầu vào 3.3V
·
GPIO 0 - kéo xuống thấp cho trình tải lên chế độ tải lên
·
RST - chân đặt lại mô-đun cứng, kéo khối lượng để đặt lại
·
GPIO 2 - thường được sử dụng như một cổng TX trong UART giao tiếp để gỡ lỗi
·
CH_PD - chip kích hoạt, sử dụng Flash Boot và cập nhật lại mô-đun, kết nối với mức cao
·
GND - nối với khối lượng
·
UTXD (TX) - sử dụng để truyền tín hiệu trong UART giao tiếp với vi điều khiển
7: Kiểm tra mô-đun wifi với tập lệnh AT
Ø Tốc độ mặc định giao tiếp mặc định (Tốc độ truyền): 9600 hoặc 115200
Ø Command AT should be written
Ø Command AT must be finished by 2 dấu CR (\ r) + LF (\ n), tương ứng với 2 byte 0x0D + 0x0A
Ø Việc the installation of connected wifi will automatically be saved and not a installing lại on reset module.
A.Các lệnh AT chung:
Lệnh AT
|
Sự miêu tả
|
Tham số
|
Thí dụ
|
AT
|
Kiểm tra command, luôn trả về "OK"
|
|
AT
|
AT + RST
|
Khởi động lại module
|
|
AT + RST
|
AT + GMR
|
Fuzzyware version
|
|
AT + GMR
|
B.Các lệnh AT configure Wifi mô đun
Lệnh AT
|
Sự miêu tả
|
Tham số
|
Thí dụ
|
AT + CWMODE = <chế độ>
|
Setup mode
|
1 = Trạm
2 = Điểm 3 = Cả hai |
AT + CWMODE = 1
|
AT + CWMODE?
|
Installed Accessure
|
|
AT + CWMODE?
|
AT + CWMODE =?
|
Accessed files may be install
|
|
AT + CWMODE =?
|
AT + CIPMUX = <chế độ>
|
Installing number of channels channels
|
0 = 1 channels connectivity
1 = Multiple connect to channel |
AT CIPMUX = 1
|
AT + CIPMODE = <chế độ>
|
Install data mode
|
0 = trong suốt
1 = Dữ liệu |
AT CIPMODE = 1
|
AT + CIPMODE?
|
Aprocessing data data installation
|
|
AT + CIPMODE?
|
C.Các lệnh AT for Module Wifi cầu là Station / client
Lệnh AT
|
Sự miêu tả
|
Tham số
|
Thí dụ
|
AT + CWJAP = <ssid>, <mật khẩu>
|
Connected with 1 wifi network
|
Ssid "SSID"
pass "password" |
AT + CWJAP = "MLAB", "1235678"
|
AT + CWJAP?
|
Wifi truy cập đang kết nối
|
|
AT + CWJAP?
|
AT + CWLAP
|
Wi-Fi Connectivity on Connected
|
|
AT + CWLAP
|
AT + CWQAP
|
Đóng kế tiếp wifi với một Access Point
|
|
AT + CWQAP
|
AT + CIFSR
|
Xem mô đun địa chỉ IP
|
|
AT + CIFSR
|
D.AT với cấu hình Module Wifi là Access Point
Lệnh AT
|
Sự miêu tả
|
Tham số
|
Thí dụ
|
AT + CWSAP = <ssid>, <password>, <chan>, <enc>
|
Installed Points for Access Point
|
SSID "
pass" password " chan" channel " enc" Mã hóa " (0 = mở 1 = WEP 2 = WPA_PSK 3 = WPA2_PSK 4 = WPA_WPA2_PSK) |
AT + CWSAP =
"MLAB", "12345678", 5,3
|
AT + CWSAP?
|
See a installation point of Access Point
|
|
AT + CWSAP?
|
AT + CWLIF
|
The list of stations are connected
|
|
AT + CWLIF
|
III: Thực nghiệm kết nối giữa mô-đun wifi ESP8266 với Ban ARDUINO UNO.
Code Arrduino điều khiển LED sáng tắt
thông qua Web Server.
#define LED_PIN 8
#define LED1_PIN 7
#define sw_Pin 2
//Khai bao bien va du lieu
//char ReceiveData;
//int button;
int count=0; //chua lan nhan SW
#define CMD_SEND_BEGIN
"AT+CIPSEND=0" //gui chuoi data qua esp8266
#define CMD_SEND_END
"AT+CIPCLOSE=0" //dung
gui chuoi
#define PROTOCOL_HTTP 88 //
port sử dụng kết nối giữa web và esp
#define PROTOCOL_HTTPS 443 // địa chỉ kết nối web
#define PROTOCOL_FTP 21 // địa chỉ nhận dạng web
#define PROTOCOL_CURRENT
PROTOCOL_HTTP // khai báo tên
#define CHAR_CR 0x0D // ky tu
bat bat dau của chuổi
#define CHAR_LF 0x0A // ký tự kết thúc của chuổi
#define STRING_EMPTY
"" // xoa chuoi
#define DELAY_SEED 1000 // tạo deylay
#define DELAY_1X (1*DELAY_SEED)
#define DELAY_2X
(2*DELAY_SEED)
#define DELAY_3X
(3*DELAY_SEED)
#define DELAY_4X
(4*DELAY_SEED)
#define DELAY_5X
(5*DELAY_SEED)
bool hasRequest = false; // gan gia tri phan hoi ve de kt
void setup()
{
delay(DELAY_5X);
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT); // khai báo chân ra
digitalWrite(LED_PIN, LOW); led
mức thấp
pinMode(LED1_PIN, OUTPUT);
digitalWrite(LED1_PIN, LOW);
pinMode(sw_Pin,INPUT);
initESP8266();
}
void loop()
{
while(Serial.available())
{
bufferingRequest(Serial.read());
}
/*********************************/
if(digitalRead(sw_Pin)==0)
{
while(digitalRead(sw_Pin)==0);
count++;
Serial.write(count);
int dem= Serial.write(count);
}
if(hasRequest == true) //
{
String htmlResponse =
"<!doctype html>"
"<html>"
"<head>"
"<title> GIAO TIEP
THIET BI NGOAI VI TEST ESP8266
</title>"
"</head>"
"<body>"
"<h1>Sinh vien thuc hien </h1>"
"<h1>PHAN HOANG THINH
</h1>"
"<h1> LE VAN HIEU </h1>"
"<form action='' method='GET'>"
"<input
type='radio' name='LED8' name='LED8ON' value='ON8' /> LED8 ON</>"
"<input type='radio' name='LED8' name='LED8OFF' value='OFF8'
/> LED8 OFF<br/>"
"<input type='radio' name='LED7' name='LED7ON' value='ON7' />
LED7 ON</>"
"<input type='radio' name='LED7' name='LED7OFF' value='OFF7'
/> LED7 OFF<br/>"
"<input type='submit' value='OK' />"
"</form>"
"</body>"
"</html>";
String beginSendCmd =
String(CMD_SEND_BEGIN) + "," + htmlResponse.length();
deliverMessage(beginSendCmd,
DELAY_1X);
deliverMessage(htmlResponse,
DELAY_1X);
deliverMessage(CMD_SEND_END,
DELAY_1X);// gia tri gui esp về dừng không gửi chuỗi
hasRequest = false;
}
/***********************************************
if(digitalRead(sw_Pin)==0)
{
while(digitalRead(sw_Pin)==0);
count++;
Serial.write(count);
}
/**************************************************/
}
//cau hinh esp truc tiep tren arduino
void initESP8266()
{
deliverMessage("AT+RST", DELAY_2X);
deliverMessage("AT+CWMODE=2", DELAY_3X);
deliverMessage("AT+CWSAP=\"THINH-HIEU \",\"989578912\",1,4",
DELAY_3X);
deliverMessage("AT+CIFSR", DELAY_1X);
deliverMessage("AT+CIPMUX=1", DELAY_1X);
deliverMessage(String("AT+CIPSERVER=1,") + PROTOCOL_CURRENT,
DELAY_1X);
}
/***************************/
void bufferingRequest(char c)
{
static String bufferData =
STRING_EMPTY;
switch (c) // chuỗi nhận dc
{
case CHAR_CR:
break;
case CHAR_LF:
{
chuoinhan(bufferData);
bufferData = STRING_EMPTY;
}
break;
default:
bufferData += c;
}
}
void chuoinhan(const String& command)
{
hasRequest =
command.startsWith("+IPD,"); //cho Arduino nhận biết có một gói tin
TCP vừa đc ESP nhận và đem xử lý nó.
/******************************************/
//LED13
if(command.indexOf("OFF8") != -1)
{
digitalWrite(LED_PIN, LOW);
}
else if(command.indexOf("ON8")
!= -1)
{
digitalWrite(LED_PIN, HIGH);
}
//delay(DELAY_1X);
/********************************************/
//LED12
if(command.indexOf("OFF7") != -1)
{
digitalWrite(LED1_PIN,
LOW);
}
else
if(command.indexOf("ON7") != -1)
{
digitalWrite(LED1_PIN, HIGH);
}
}
//gui message len server
void deliverMessage(const String& msg, int dt)
{
Serial.println(msg);
delay(dt);
}