Lab 1 - ESP IDE LED - 24HKII

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 12

BỘ MÔN KỸ THUẬT MÁY TÍNH – VIỄN THÔNG

CƠ SỞ VÀ ỨNG DỤNG IOTS


MMH: ITFA436064
Thời gian thực hiện: 01 buổi
Nhóm:
Nguyễn Quí Trinh – 21161480
Phạm Thùy Dương – 21161440
Nguyễn Đức Cầm - 21161431
Bùi Trọng Nhân - 21161011
1. So sánh chuẩn truyền thông Wifi và chuẩn truyền thông Zigbee, Lora, Lorawan.

Wifi: là giao thức dựa trên tiêu chuẩn IEEE 802.11 Zigbee: truyền thông không dây mạng cục bộ, tốc độ
của mạng không dây, cho phép trao đổi dữ liệu và và mức tiêu thụ năng lượng thì thấp, pham vi ngắn và
truy cập các thiết bị qua sóng vô tuyến, giảm chi phí độ phức tạp cao.Được chuẩn hóa theo IEEE 802.15.4
mở rộng và khai triển. Phạm vy truy cập trong nhà
và 868 MHz-868.6 MHz, 902 MHz-928 MHz và
khoảng 20m, ngoài trời tới 150m. cho phép mọi thiết
bị tiêu chuẩn Wi-Fi hoạt động chính xác ở mọi nơi 2.4GHz-2.4835GHz là 3 dải tần số.Tốc độ dữ liệu:
trên thế giới. Khoảng cách liên lạc còn hạn chế, kém 20kbps ,40kbps, 250kbps.Còn chống nhiễu kém.
ổn định. Kết nối và độ bảo mật thấp hơn các truyền
thông khác.

LoRa: giao thức mạng diện rộng năng lượng thấp LoRaWan: giao thức của nó dựa theo LoRa để nhắm
(LPWA) để kết nối với thiết bị sử dụng pin, quốc gia đến mạng diện rộng và khối truy cập lớn, tốc độ thấp,
hoặc khu vực, liên lạc 2 chiều. phạm vi là hàng km. chi phí thấp. phạm vi giao tiếp xa khoảng 15km ở khu
vực trống và thành thị cách xa tới 5km.Độ bảo mật
cao, chống nhiễu kém.
2. So sánh thông số kỹ thuật của ESP32 và ESP8266
ESP32: ESP8266:
Cũng là chip mô-dun WI-Fi, giao thức IP / TCP.
là chip mô-dun Wi-Fi có chi phí rẻ, sử dụng chip ESP2866 cho phép truy cập vào bất kỳ bộ vi điều
MCU, là phiên bản nâng cao của dòng ESP8266. Có khiển nào thông qua kết nối Wifi. Nó có độ bền cao
bộ đồng xử lý lõi kép và công suất cực thấp.Vì sự và có thể hoạt động ổn định ngay cả trong môi trường
thiếu bảo mật trong ESP8266 nên ESP32 mới được công nghiệp khắc nghiệt. Bộ xử lí là Tensili Xtensa
phát triển. 32-bit LX106 RISC, 4mb bộ nhớ Flash để lưu trữ dữ
liệu và chương trình của nó
Tần số ESP32 (32bit): 160Mhz - 240Mhz. Có kết nối
bluetooth4.2 và Low Energy. ESP8266 là một bộ xử lý lõi đơn chạy ở 80MHz
GPIO và giao tiếp được nhiều với nhau : SPI, I2C và Hỗ trợ: UART, SPI và I2C, không kết nối bluetooth
UART
Cảm biến chân cảm ứng ,có thể đánh thức về trạng
Cảm biến chân cảm ứng ,có thể đánh thức về trạng
thái ngủ sâu.
thái ngủ sâu.
Không cảm biến nhiệt độ, không Rom, thiếu bảo mật
Cảm biến hiệu ứng Hall và nhiệt độ.

CƠ SỞ VÀ ỨNG DỤNG IOTS - ITFA436064


3. Sơ đồ chân kết nối ESP32 (hoặc ESP8266) (lập bảng chức năng các chân).
Sơ đồ các chân của ESP32.

4. Các bước cài đặt và giao tiếp ESP32 (hoặc ESP 8266) với phần mềm Arduino IDE.
Bước 1: Giao tiếp ESP32 với phần mền wokki.

CƠ SỞ VÀ ỨNG DỤNG IOTS - ITFA436064


Bước 2: kéo xuống mục Starter Templates, xong chọn ESP32.

Bước 3: Vẽ thêm điện trở và led, nạp code vào ESP32.

Layor:

CƠ SỞ VÀ ỨNG DỤNG IOTS - ITFA436064


5. Các bước thực hiện và giải thích code chương trình chớp tắt LED (4 Led) kết hợp giao tiếp nút nhấn
để chọn Mode chớp tắt trên ESP32 (hoặc ESP8266) và hình ảnh chụp các kết quả.
Vẽ sơ đồ nguyên lý của mạch.
int button = 19; // Khai báo biến va chân kết nối nút nhấn
int led[] = {25, 26, 27, 14}; //khai báo chân mảng led có 4 phần tử
int state =0;
int i;
void setup() {
pinMode(button, INPUT); //nút nhấn là input
for(i=0;i<4;i++) {
pinMode(led[i], OUTPUT); } //bốn led là ngõ ra
}

CƠ SỞ VÀ ỨNG DỤNG IOTS - ITFA436064


void choptat()
{
for(i=0;i<4;i++) //Bắt đầu vòng lặp, lặp qua từng phần tử trong mảng led
digitalWrite(led[i], HIGH); // 4 led sáng
delay(1000); //delay 1s
for(i=0;i<4;i++)
digitalWrite(led[i], LOW); // 4 led tắt
delay(1000);
}
void sangdan()
{
for(i=0;i<4;i++) //vòng lặp để led sáng dần từ trái sang phải
{
digitalWrite(led[i], LOW); //led tắt ở vị trí i
delay(500);
}
for(i=0;i<4;i++)
{
digitalWrite(led[i],HIGH);
}
delay(500);
}
void tatdan()
{
for(i=0;i<4;i++)
{
digitalWrite(led[i], HIGH); // các led sáng
}
delay(500);

for(i=0;i<4;i++) //led tắt dần


{

CƠ SỞ VÀ ỨNG DỤNG IOTS - ITFA436064


digitalWrite(led[i],LOW);
delay(500);
}
}
void motledchay()
{
int run=0; //Khởi tạo biến run với giá trị ban đầu là 0. Biến này sẽ được sử dụng để chỉ định LED nào
sẽ được bật
for(i=0;i<4;i++)
digitalWrite(led[i], LOW); // vòng lặp để tắt tất cả các LED.
digitalWrite(led[run], HIGH); //Sử dụng hàm digitalWrite() để đặt mức cao (HIGH) cho chân kết nối
LED tại vị trí run. Điều này sẽ bật LED tại vị trí run, chỉ định LED hiện đang chạy.
delay(500);
run++;
if(run>4) //Kiểm tra nếu giá trị của biến run vượt quá 4, nghĩa là đã đi qua tất cả các LED, thì đặt lại
giá trị của run về 0.
run=0;
}
void chedo()
{
if(!digitalRead(button)==1) //đọc trạng thái của nút và trả về giá trị HIGH hoặc LOW
{
if(state<3) //Câu lệnh if(state<3) kiểm tra giá trị của biến state có nhỏ hơn 3 hay không.
state++; //Nếu state<3 là đúng, tức là giá trị của state nhỏ hơn 3, thì giá trị của state được tăng lên 1.
else
state=0; //Nếu state<3 là sai, tức là giá trị của state là 3, thì giá trị của state được đặt lại thành 0.
}
}
void loop()
{
chedo();
if(state==0) //Nếu state có giá trị bằng 0, tức là state == 0 là đúng, thì gọi hàm choptat()
choptat();

CƠ SỞ VÀ ỨNG DỤNG IOTS - ITFA436064


else if(state==1) //Nếu state có giá trị bằng 1, tức là state == 1 là đúng, thì gọi hàm sangdan().
sangdan();
else if(state==2) //Nếu state có giá trị bằng 2, tức là state == 2 là đúng, thì gọi hàm tatdan().
tatdan();
else if(state==3) //Nếu state có giá trị bằng 3, tức là state == 3 là đúng, thì gọi hàm motledchay()
motledchay();
}

Kêt quả
Mode1

CƠ SỞ VÀ ỨNG DỤNG IOTS - ITFA436064


Mode2

Mode3

CƠ SỞ VÀ ỨNG DỤNG IOTS - ITFA436064


Mode4

6. Thực hiện giao tiếp ESP32 và 2 Led đơn điều khiển chớp tắt 2 Led (có sử dụng FreeRTOS). Giải thích
code và chụp hình ảnh (kèm clip nếu có) kết quả thực hiện.

CƠ SỞ VÀ ỨNG DỤNG IOTS - ITFA436064


GIẢI THÍCH CODE:
SemaphoreHandle_t xSemaphore = NULL; Biến này sẽ được sử dụng để lưu trữ Semaphore.
void vTaskLED1(void *pvParameters) Khai báo hàm nhiệm vụ vTaskLED1 nhận đối số
pvParameters kiểu con trỏ void.
pinMode(LED_PIN_1, OUTPUT); Đặt chế độ chân LED_PIN_1 là OUTPUT để điều
khiển đèn LED 1.
while (1) { ... } Bắt đầu một vòng lặp vô hạn để thực hiện các công
việc bên trong.
if (xSemaphoreTake(xSemaphore, (TickType_t)10) == Kiểm tra xem Semaphore có sẵn để lấy hay không.
pdTRUE) { ... } Nếu Semaphore có sẵn, điều kiện sẽ trả về
pdTRUE và các công việc bên trong điều kiện sẽ
được thực hiện.
digitalWrite(LED_PIN_1, !digitalRead(LED_PIN_1)); Đảo trạng thái của đèn LED 1 bằng cách đọc trạng
thái hiện tại của nó, sau đó sử dụng digitalWrite để
thiết lập trạng thái mới cho LED 1.
vTaskDelay(pdMS_TO_TICKS(1000)); Đặt thời gian chờ 1 giây trước khi tiếp tục vòng
lặp.
if (xSemaphoreTake(xSemaphore, (TickType_t)10) == Kiểm tra xem Semaphore có sẵn để lấy hay không.
pdTRUE) { ... } Nếu Semaphore có sẵn, điều kiện sẽ trả về
pdTRUE và các công việc bên trong điều kiện sẽ
được thực hiện.

CƠ SỞ VÀ ỨNG DỤNG IOTS - ITFA436064


digitalWrite(LED_PIN_2, !digitalRead(LED_PIN_2)); Đảo trạng thái của đèn LED 2 bằng cách đọc trạng
thái hiện tại của nó
void setup() { ... } Đây là hàm khởi tạo của Arduino, nơi các cài đặt
ban đầu được thực hiện.
xTaskCreatePinnedToCore(vTaskLED1, "LED1", Tạo một nhiệm vụ mới (vTaskLED1) và gắn
1000, NULL, 2, NULL, 1); nhiệm vụ này vào core 1 bằng cách sử dụng hàm,
ưu tiên của nhiệm vụ và con trỏ đến biến xử lý
nhiệm
xTaskCreatePinnedToCore(vTaskLED2, "LED2", Tương tự như trên.
1000, NULL, 1, NULL, 1);
void loop() { } Đây là hàm vòng lặp chính của Arduino. Trong
trường hợp này, không có hoạt động nào được thực
hiện trong hàm loop, vì các công việc được thực
hiện trong các nhiệm vụ đã đủ để điều khiển LED.

Hình ảnh làm việc nhóm.

CƠ SỞ VÀ ỨNG DỤNG IOTS - ITFA436064


CƠ SỞ VÀ ỨNG DỤNG IOTS - ITFA436064

You might also like