Tải bản đầy đủ (.docx) (24 trang)

Ôn tập phát triển ứng dụng IoT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (726.92 KB, 24 trang )

1

ĐỀ CƯƠNG ÔN TẬP MÔN PHÁT TRIỂN ỨNG DỤNG IOT
(ver01 – tiếp tục cập nhật…)

1. Nắm vững khái niệm IoT
1. Làm rõ thuật ngữ thế nào là công nghê nhúng?


Hệ thống nhúng (tiếng Anh: embedded system) là một thuật ngữ
để chỉ một hệ thống có khả năng tự trị được nhúng vào trong một
môi trường hay hệ thống mẹ. Đó là các hệ thống tích hợp cả phần
cứng và phần mềm phục vụ các bài toán chuyên dụng trong nhiều
lĩnh vực công nghiệp, tự động hoá điều khiển, quan trắc và truyền
tin. Đặc điểm của các hệ thống nhúng là hoạt động ổn định và có
tính năng tự động hoá cao.

2. Hê sinh thái IoT




Cho phép các tổ chức có thể kết nối, kiểm soát và sử dụng các
thiết bị IoT.
Một tổ chức có thể sử dụng các thiết bị như điên thoại thông
minh, máy tính bản,… để gửi đi các hiêu lênh, hoặc truy cập
thông tin từ một mạng lưới các thiết bị IoT khác.
Thiết bị nhận lênh sẽ thực hiên các công viêc được thiết kế, thu
thập dữ liêu để được truy cập và phân tích nhanh chóng.

3. Things trong IoT có nghĩa là gì?



2. Các đặc điểm của IoT
1. Connectivity


Connectivity: Kết nối liên thông - là khả năng các thiết bị đều
có thể kết nối với nhau.



“Things”: Các bộ cảm biến/thiết bị thông minh.



Data: Thu thập từ bộ cảm biến/thiết bị thông minh  dữ liêu
lớn.

2. Things

3. Data

4. Communication


Communication: Giao tiếp giữa thiết bị với ứng dụng, giữa các
thiết bị với nhau.

Ôn tập PTUD IoT. GV: T.T.T.Thúy.



2

3. Khả năng ứng dụng của IoT
1. Lí do bùng nổ các ứng dụng IoT?
• Có 4 động lực chính cho thị trường IOT:
• Kết nối Internet ngày càng mở rộng.
• Thiết bị di động bùng nổ.
• Thiết bị cảm biến với chi phí ngày càng thấp hơn.
• Các nguồn đầu tư lớn đang đổ vào IOT
2. Phân tích Top 10 ứng dụng IoT: (slide 27 chương 1..): Lĩnh vực nào ứng dụng
IoT nhiều nhất
• Phân tích năm 2020 của các lĩnh vực ứng dụng IoT hàng đầu 
cho thấy trong số 1.414 dự án IoT doanh nghiệp nhà nước được
xác định, cài đặt Sản xuất / Công nghiệp phổ biến nhất (22%), 
tiếp theo là Giao thông vận tải / Di động (15%) và các dự án IoT 
năng lượng (14%).

Lĩnh vực ứng dụng IoT #1: Sản xuất / Công nghiệp
1a. Tổng quan
Sản xuất / Công nghiệp đã chiếm vị trí hàng đầu từ "Thành phố" ­ khu 
vực ứng dụng IoT số một trong phân tích năm 2018. Các gã khổng lồ 
công nghệ như Microsoft và AWS cũng như các công ty tự động hóa 
công nghiệp lớn như Siemens hay Rockwell Automation là một trong 
những động lực của quá trình chuyển đổi kỹ thuật số trong ngành sản 
xuất / công nghiệp.
"IoT công nghiệp đang thay đổi các quy tắc sản xuất,
thúc đẩy đổi mới đám mây và biên, thúc đẩy sự phát
triển của các nhà máy kỹ thuật số và nâng cao hiệu
suất hoạt động."
Satya Nadella, CEO của Microsoft, tháng 11 năm 2019

"Các nhà sản xuất và các nhà khai thác công nghiệp
đang khám phá những cách thực tế để áp dụng IoT
trong hoạt động của họ và kết quả là họ đang có được
giá trị kinh doanh có thể đo lường được. Kết hợp công
nghệ IoT và chuyên môn trong các ứng dụng công
nghiệp cụ thể cho phép cộng tác tốt hơn, giải quyết
vấn đề nhanh hơn và tăng năng suất."
Blake Moret, Giám đốc điều hành của Rockwell Automation, tháng 5 
năm 2019

3. Rào cản (khó khăn) lớn nhất đối với các tổ chức triển khai IoT là gì (slide 32
chương 1…)
• Chi phí đầu tư lớn dẫn tới các doanh nghiệp chưa sẵn sàng
áp dụng.


Ôn tập PTUD IoT. GV: T.T.T.Thúy.

Trên thực tế để tạo ra một sản phẩm không khó nhưng
chi phí để tiếp thị, thuyết phục cộng đồng sử dụng lại là
một vấn đề khó khăn. Hơn nữa, chi phí để quảng bá sản


3
phẩm không lớn nhưng chi phí để tạo ra sản phẩm mẫu
lại rất cao. Từ khi lên ý tưởng đến đi vào sản xuất cũng
mất khá nhiều thời gian, mà hê thống phần cứng, thiết
bị phụ trợ tại Viêt Nam nhiều khi chưa đủ đề đáp ứng.
Vấn đề chính ở đây là do giá thành thiết bị khiến cho
các doanh nghiêp còn rụt rè khi áp dụng IoT vào quá

trình sản xuất và quản lí của mình.

4. So sánh IoT và IoE
Trong IoE - Internet Of Everything, theo khái niệm ở trên, thì "things"
được hiểu là tất cả các đối tượng vật chất hiện tại, nó có thể là một
chiếc điện thoại thông minh hoặc là một bộ điều chỉnh nhiệt. Một thiết
bị kết nối qua internet có thể cho phép điều khiển từ xa một bộ điều
chỉnh nhiệt, để đạt nhiệt độ mong muốn chỉ với chiếc điện thoại thông
minh có kết nối internet. Tuy nhiên, như chúng ta biết, internet không
chỉ có các vật thể vật lý. Internet cũng chứa các luồng dữ liệu thông
qua các kết nối giữa các máy tính, kết quả là làm cho con người trở
thành một phần chính của nó. Inernet of everythings cho phép tất cả
mọi thứ có thể tương tác với nhau, khác với IoT chỉ cho phép các
thiết bị tương tác với nhau.
5. Ba giai đoạn phát triển của kiến trúc IoT là gì (slide 46 C1…)
3 giai đoạn phát triển của kiến trúc IoT:
 Pha 1 - Kết nối:
o Cảm biến -> gửi thông tin về bản thân và môi trường ->
trạm kết nối -> cloud.
o Đảm bảo kết nối liên thông an toàn.
 Pha 2 – Phân tích và trực quan hóa:
o Phân tích thông minh trên đống dữ liệu lớn;
o Trực quan hóa kết quả.
 Pha 3 – Tự động hóa:
o Tối ưu và tự động từng thành phần
o Tối ưu và tự động toàn bộ hệ thống
o Tự động qua Internet theo một trình tự hay quy tắc logic
nào đấy
6. So sánh phương pháp thiết kế ứng dụng IoT truyền thống và phương pháp
thiết kế dùng Arduino (slide 59,60-C1..)

Ôn tập PTUD IoT. GV: T.T.T.Thúy.


4

TT
1

Phương pháp thiết kế truyền
thống
Đòi hỏi nhiều kỹ năng:
- Hiểu biết chuyên sâu về linh kiện,
- Vẽ mạch, hàn mạch,
- Lập trình (không có nhiều hỗ trợ
sẵn có do module tự thiết kế
không chuẩn hoá)

Phương pháp thiết kế với Arduino
(Open Hardware)
Không đòi hỏi nhiều kỹ năng:
- Tập trung vào tư duy hệ thống
- Lập trình được hỗ trợ bởi nhiều thư
viện chuẩn hoá của các module

2

Thời gian thực hiện ý tưởng khá
lâu, dễ nản long

Thời gian thực hiện ý tưởng rất

nhanh, tạo hứng thú

3

Chú trọng nhiều đến chi tiết (linh
kiện, chất lượng hàn mạch…)
ảnh hưởng đến thời gian phát
triển quy mô hệ thống, giảm
tính toàn diện
Phát triển được các kỹ năng thiết
kế mạch, kỹ năng hàn mạch,
sửa lỗi

Tập trung vào hệ thống, có thể thực
hiện được các hệ thống phức tạp,
toàn diện

Chỉ dành cho giới chuyên nghiệp

Dành cho cộng đồng rộng hơn từ giới
chuyên nghiệp cho đến không
chuyên, thậm chí trẻ em (cấp 1)
phát triển được các ứng dụng
theo sở thích

4

5

Phát triển tư duy lập trình, hệ thống


7. Các ngôn ngữ lập trình cho IoT (Tham khảo: slide62-66,slide C1;
/> C/C++:
 Nó được sử dụng để thiết kế trong chương trình chuyển mạch
điện thoại
 Rất hoàn hảo cho các hệ thống nhúng
 Thiên về biên dịch hơn là diễn giải.
 Java:
Ôn tập PTUD IoT. GV: T.T.T.Thúy.


5

 Viết một lần chạy được trên nhiều hệ thống khác nhau có cài máy
ảo java
 Java lý tưởng cho IoT vì:
• Java là ngôn ngữ lập trình hướng đối tượng cho IoT
• Ngôn ngữ Java có các khả năng tích hợp hữu ích cho các
ứng dụng IoT
• Java có tính di động cao và không có giới hạn phần cứng
 Python:
 Là một ngôn ngữ lập trình dạng thông dịch -> Giúp các lập trình
viên tiết kiệm thời gian phát triển ứng dụng.
 Không cần phải thực hiện biên dịch và liên kết -> Lý tưởng cho
phần phân tích dữ liệu của các hệ thống IoT:
• Mã nguồn nhỏ gọn và dễ đọc vì cú pháp rõ ràng
• Python rất dễ học, được sử dụng rộng rãi và được hỗ trợ
mạnh mẽ
• Sự lựa chọn tuyệt vời để quản lý và tổ chức các luồng dữ
liệu phức tạp. Mà không phải duy trì các cơ sở mã phức tạp

như nhau
 Phù hợp với hệ thống nhúng
 Phù hợp với các ứng dụng đòi hỏi truy xuất dữ liệu lớn, đặc biệt
trên nền web.
 JavaScript:
 Được sử dụng làm ngôn ngữ lập trình trong tất cả các trình duyệt
web và HTML.
 Là một ngôn ngữ lập trình chia sẻ các thư viện của nó với các
ngôn ngữ.
 Giúp các thiết bị tương thích với nhau.
 Hầu hết các công việc tập trung vào các máy chủ và trung tâm thu
thập thông tin và sau đó lưu trữ nó.
 Giúp các nhà phát triển web dễ dàng di chuyển vào IoT mà không
cần học một ngôn ngữ mới.
 Swift:
 Là ngôn ngữ lập trình được sử dụng để tạo ứng dụng cho các
thiết bị iOS của MacOS hoặc Apple.
 Apple đã xây dựng các thư viện IoT có thể xử lý nhiều công việc.
 Giúp các nhà phát triển dễ dàng tập trung vào công việc hơn.
 Thư viện này là nền tảng của nền tảng HomeKit.
Ôn tập PTUD IoT. GV: T.T.T.Thúy.


6

 Cung cấp hỗ trợ tích hợp các nguồn cấp dữ liệu từ một mạng các
thiết bị tương thích.

8. Vị trí việc làm kỹ sư IoT (tham khảo slide 67,C1…)
9. Các ứng dụng IoT trong nông nghiệp thông minh?

10.Ứng dụng IoT trong nuôi tôm thông minh?
11. Ứng dụng IoT trong nhà thông mình?
12.Ứng dụng IoT trong thành phố thông minh?
13.Ứng dụng IoT trong y tế thông minh?

Ôn tập PTUD IoT. GV: T.T.T.Thúy.


14.Phần cứng arduino Uno R3
-

Nắm được cấu tạo, các thành phần đặc điểm các chân trên Arduino Uno R3
Sơ đồ chân của Arduino Uno

USB (1).
-

Arduino sử dụng cáp USB để giao tiếp với máy tính. Thông qua cáp USB chúng ta
có thể Upload chương trình cho Arduino hoạt động, ngoài ra USB còn là nguồn
cho Arduino.
Nguồn ( 2 và 3 ).
- Khi không sử dụng USB làm nguồn thì chúng ta có thể sử dụng nguồn ngoài
thông qua jack cắm 2.1mm ( cực dương ở giửa ) hoặc có thể sử dụng 2 chân Vin và GND để cấp
nguồn cho Arduino.
- Bo mạch hoạt động với nguồn ngoài ở điên áp từ 5 – 20 volt. Chúng ta có thể cấp
một áp lớn hơn tuy nhiên chân 5V sẽ có mực điên áp lớn hơn 5 volt. Và nếu sử
dụng nguồn lớn hơn 12 volt thì sẽ có hiên tượng nóng và làm hỏng bo mạch.
Khuyết cáo các bạn nên dùng nguồn ổn định là 5 đến dưới 12 vol.
- Chân 5V và chân 3.3V (Output voltage) : các chân này dùng để lấy nguồn ra từ
nguồn mà chúng ta đã cung cấp cho Arduino. Lưu ý : không được cấp nguồn vào

các chân này vì sẽ làm hỏng Arduino.
- GND: chân mass.
Chip Atmega328.
Chip Atmega328 Có 32K bộ nhớ flash trong đó 0.5k sử dụng cho bootloader.
Ngoài ra còn có 2K SRAM, 1K EEPROM.
Input và Output ( 4 và 5 ).
- Arduino Uno có các chân với chức năng input và output sử dụng các hàm
pinMode(), digitalWrite() và digitalRead() để điều khiển các chân này (Analog :
A0 đến A5) (digital : chân số 0 đến chân số 13).
Cũng trên 14 chân này chúng ta còn một số chân chức năng đó là:
- Serial : chân 0 (Rx ), chân 1 ( Tx). Hai chân này dùng để truyền (Tx) và nhận (Rx) dữ
liêu nối tiếp TTL. Chúng ta có thể sử dụng nó để giao tiếp với cổng COM của một số
thiết bị hoặc các linh kiên có chuẩn giao tiếp nối tiếp.
- PWM (pulse width modulation): các chân 3, 5, 6, 9, 10, 11 trên bo mạch có
dấu ―~‖ là các chân PWM chúng ta có thể sử dụng nó để điều khiển tốc độ động


-

cơ, độ sáng của đèn…
SPI : 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK), các chân này hỗ trợ giao tiếp
theo chuẩn SPI.
I2C: Arduino hỗ trợ giao tiếp theo chuẩn I2C. Các chân A4 (SDA) và A5
(SCL) cho phép chúng tao giao tiếp giửa Arduino với các linh kiên có chuẩn giao
tiếp là I2C
Reset (6): dùng để reset Arduino.

15.Ngôn ngữ lập trình Arduino (Tham khảo tài liệu và chương 3-CSHT mạng
IoT)
-


Làm một số bài tập:
+ Nhấp nháy Led

1.
2. int led = 13;
3.
4. // Hàm setup chạy một lần duy nhất khi khởi động chương trình
5. void setup() {
6. // đặt 'led' là OUTPUT
7. pinMode(led, OUTPUT);
8. }
9.
10.

// Hàm loop chạy mãi mãi sau khi kết thúc hàm setup()

11.

void loop() {

12.

digitalWrite(led, HIGH); // bật đèn led sáng

13.
delay(1000); // dừng chương trình trong 1 giây => thây đèn sáng
được 1 giây
14.


digitalWrite(led, LOW); // tắt đèn led

15.
delay(1000); // dừng chương trình trong 1 giây => thấy đèn tối
được 1 giây
16.

}


+Led sáng khi nhấn nút
int button = 11;
int led = 2;
void setup() {
pinMode(button, INPUT); //Cài đặt chân D11 ở trạng thái đọc dữ
liệu
pinMode(led,OUTPUT); // Cài đặt chân D2 dưới dạng OUTPUT
}
void loop() {
int buttonStatus = digitalRead(button);
//Đọc trạng thái button
if (buttonStatus == HIGH) { // Nếu mà button bị nhấn
digitalWrite(led,HIGH); // Đèn led sáng
} else { // ngược lại
digitalWrite(led,LOW);
}
}

+Led sáng theo thứ tự
byte ledPin[] = {2,3,4,5,6,7,8,9};

// Mảng lưu vị trí các chân Digital mà các đèn LED sử dụng theo thứ
tự từ 1->8. Bạn có thể thêm các LED bằng cách thêm các chân digital
vào mảng này
byte pinCount; // Khai báo biến pinCount dùng cho việc lưu tổng số
chân LED
void setup() {
pinCount = sizeof(ledPin); //Xem thêm thông tin về hàm sizeof tại
/>for (int i=0;ipinMode(ledPin[i],OUTPUT); //Các chân LED là OUTPUT
digitalWrite(ledPin[i],LOW); //Mặc định các đèn LED sẽ tắt
}

}
void loop() {
/*
Bật tuần tự các đèn LED
*/
for (int i=0; i < pinCount; i++) {
digitalWrite(ledPin[i],HIGH); //Bật đèn
delay(500); // Dừng để các đèn LED sáng dần
}


/*
Tắt tuần tự các đèn LED
*/
for (int i = 0;i < pinCount; i += 1) {
digitalWrite(ledPin[i],LOW); // Tắt đèn
delay(500); // Dừng để các đèn LED tắt dần
}

}

+ Led sáng dần..
1. int led = 6; // cổng digital mà LED được nối vào
2. int brightness = 0; // mặc định độ sáng của đèn là
3. int fadeAmount = 5; // mỗi lần thay đổi độ sáng thì thay đổi với giá
trị là bao nhiêu
4.
5.
6. void setup() {
7. // pinMode đèn led là OUTPU
8. pinMode(led, OUTPUT)
9. }
10.
11.

void loop() {

12.

//xuất giá trị độ sáng đèn LE

13.

analogWrite(led, brightness);

14.
15.

// thay đổi giá trị là đèn LE


16.

brightness = brightness + fadeAmount

17.
18.
// Đoạn code này có nghĩa nếu độ sáng == 0 hoặc bằng == 255 thì
sẽ đổi chiều của biến thay đổi độ sáng. Ví dụ, nếu đèn từ sáng yếu -->


sáng mạnh thì fadeAmount dương. Còn nếu đèn sáng mạnh --> sáng yếu thì
fadeAmmount lúc này sẽ có giá trị â

19.

if (brightness == 0 || brightness == 255)

20.

fadeAmount = -fadeAmount

21.

}

22.

//đợi 30 mili giây để thấy sự thay đổi của đè


23.

delay(30);

24.

}

16.Một số cảm biến cần học và cách giao tiếp với Arduino
1. Cảm biến nhiệt độ LM35
Đọc giá trị từ cảm biến LM35 và hiển thị lên LCD16x2
Giới thiêu cảm biến nhiêt độ LM35:
Cảm biến nhiêt độ LM35 là một loại cảm biến tương tự rất hay được ứng dụng trong các
ứng dụng đo nhiêt độ thời gian thực ( nhưng vẫn còn sai số lớn) . Với kích thước nhỏ và
giá thành rẻ là một trong những ưu điểm của nó. Vì đây là cảm biến tương tự (analog
sensor) nên ta có thể dễ dàng đọc được giá trị của nó bằng hàm analogRead().

Nhiêt độ được xác định bằng cách đo hiêu điên thế ngõ ra của LM35.
→ Đơn vị nhiêt độ: °C.
→ Nhiêt độ thay đổi tuyến tính: 10mV/°C


Độ chính xác thực tế: 1/4°C ở nhiêt độ phòng và 3/4°C ngoài khoảng 2°C tới 150°C công
suất tiêu thụ là 60uA.


Cảm biến LM35 hoạt động bằng cách cho ra một giá trị hiêu điên thế nhất định tại chân
Vout (chân giữa) ứng với mỗi mức nhiêt độ.
Như vậy, bằng cách đưa vào chân bên trái của cảm biến LM35 hiêu điên thế 5V, chân
phải nối đất, đo hiêu điên thế ở chân giữa bằng các pin A0 trên arduino (giống y hêt cách

đọc giá trị biến trở), bạn sẽ có được nhiêt độ (0-100ºC) bằng công thức:
float temperature = (5.0*analogRead(A0)*100.0/1024.0);
Với LM35, bạn có thể tự tạo cho mình mạch cảm biến nhiêt độ sử dụng LM35 và tự động ngắt
điên khi nhiêt độ vượt ngưỡng tối đa, đóng điên khi nhiêt độ thấp hơn ngưỡng tối thiểu thông
qua module rơ le...

int sensorPin = A0; // chân analog kết nối tới
cảm biến LM35
void setup() {
Serial.begin(9600); //Khởi động Serial ở
mức baudrate 9600
// Bạn không cần phải pinMode cho các
chân analog trước khi dùng nó
}
void loop() {

float voltage = reading * 5.0 / 1024.0;
// cứ mỗi 10mV = 1 độ C.
// Vì vậy nếu biến voltage là biến lưu hiêu
điên thế (đơn vị Volt)
// thì ta chỉ viêc nhân voltage cho 100 là ra
được nhiêt độ!
float temp = voltage * 100.0;
Serial.println(temp);

//đọc giá trị từ cảm biến LM35

delay(1000); //đợi 1 giây cho lần đọc tiếp
theo


int reading = analogRead(sensorPin);

}

//tính ra giá trị hiêu điên thế (đơn vị Volt) từ
giá trị cảm biến


2. Cảm biến nhiệt độ và độ ẩm DHT11
-

Trước tiên bạn cài 2 thư viên : DTH11 và I2C cho arduino IDE
o Thư viện Liquidcrystal_I2C. Tải ngay
o Thư viện DHT.h. Tải ngay
Giới thiêu về giao tiếp I2C: I2C là viết tắt của "Inter-Integrated Circuit", một
chuẩn giao tiếp được phát minh bởi Philips‘ semiconductor division (giờ là NXP)
nhằm đơn giản hóa viêc trao đổi dữ liêu giữa các ICs. Đôi khi nó cũng được gọi là
Two Wire Interface (TWI) vì chỉ sử dụng 2 kết nối để truyền tải dữ liêu, 2 kết nối
của giao tiếp I2C gồm: SDA (Serial Data Line) và SCL (Serial Clock Line). Có
hàng ngàn thiết bị sử dụng giao tiếp I2C, chẳng hạn như real-time clocks, digital
potentiometers, temperature sensors, digital compasses, memory chips, FM radio
circuits, I/O expanders, LCD controllers, amplifiers,...Board Arduino của chúng ta
có thể kiểm soát tất cả và số lượng tối đa trong một thời điểm lên đến 112 thiết bị
I2C. Trên board Arduino UNO, SDA là chân analog A4, SCL là chân analog A5.
Module DHT11:

Thông số kỹ thuật DHT11: DHT11 Là cảm biến nhiêt độ, độ ẩm rất thông dụng
hiên nay vì chi phí rẻ và rất dễ lấy dữ liêu thông qua giao tiếp 1-wire ( giao tiếp
digital 1-wire truyền dữ liêu duy nhất). Cảm biến được tích hợp bộ tiền xử lý tín
hiêu giúp dữ liêu nhận về được chính xác mà không cần phải qua bất kỳ tính toán

nào.
 Đặc điểm:
o Điên áp hoạt động : 3V - 5V (DC)
o Dải độ ẩm hoạt động : 20% - 90% RH, sai số ±5%RH
o Dải nhiêt độ hoạt động : 0°C ~ 50°C, sai số ±2°C
o Tần số lấy mẫu tối đa: 1 Hz


-

o Khoảng cách truyền tối đa: 10m
Hiển thị giá trị nhiêt độ và độ ẩm lên màn hình LCD

Code:
#include <DHT.h>

0B01110,

#include <Wire.h>

0B00000,

#include <LiquidCrystal_I2C.h>

0B00000,

LiquidCrystal_I2C lcd(0x3F,16,2);

0B00000,


const int DHTPIN = 4;

0B00000,

const int DHTTYPE = DHT11;

0B00000

DHT dht(DHTPIN, DHTTYPE);
byte degree[8] = {
0B01110,
0B01010,

};


void setup()

lcd.print("Do am: ");

{ lcd.init();

lcd.createChar(1, degree);

lcd.backlight();

dht.begin();

lcd.print("Nhiet do: ");


}

lcd.setCursor(0,1);
Giải thích một số hàm
Hàm createChar()
lcd.createChar(1, degree);

void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();

if (isnan(t) || isnan(h)) {
}
else
{ lcd.setCursor(10,
0);
lcd.print(round(t));
lcd.print(" ");
lcd.write(1);
lcd.print("C");

lcd.setCursor(10,1);
lcd.print(round(h));
lcd.print(" %");
}
}
Dùng để tạo một ký tự tùy chỉnh để sử dụng trên màn hình LCD. Tối đa có 8 ký
tự được hỗ trợ là 5x8 pixel (được đánh số từ 0 đến 7).Sự xuất hiên của mỗi ký tự
tùy chỉnh được chỉ định bởi một mảng gồm 8 byte, 1 byte cho mỗi hàng.
Để hiển thị một ký tự tùy chỉnh trên màn hình ta dùng hàm write() để viết ra con



số đó.
Cú pháp
lcd.createChar(số, dữ liêu)
Thông số
lcd: là một biến của kiểu dư liêu LiquidCrystal.
số: tạo ký tự (0 đến 7).
dữ liêu: dữ liêu của các ký tự là pixel.
Hàm isnan()
if (isnan(t) || isnan(h))
Hàm isnan() là hàm trả về true hoặc false nếu giá trị cần kiểm tra không phải là
một biểu thức toán học đúng.
Ở đoạn code trên mình kiểm tra xem thử viêc đọc giá trị của nhiêt độ hoặc độ ẩm
trả về có bị thất bại hay không.
Cú pháp
isnan(double x) ;
Hàm round()
lcd.print(round(t));
Hàm round() là hàm làm tròn của một giá trị nào từ số thập phân làm tròn tới số
nguyên gần nhất.
3. Cảm biến khí CO2
Đọc giá trị CB khí gas (MQ2) hiển thị serial monitor
Mở rộng: Hiển thị lên màn hình LCD
Giới thiêu:
Cảm biến khí ga MQ2 là một trong những loại cảm biến được sử dụng để nhận biết: LPG, ibutan, Propane, Methane , Alcohol, Hydrogen, Smoke và khí ga. Được thiết kế với độ nhạy cao,
thời gian đáp ứng nhanh. Gía trị đọc được từ cảm biến sẽ được đọc về từ chân Analog của vi
điều khiển.



Thông số kĩ thuật:
Nguồn hoạt động: 5VDC
Dòng: 150mA
Tính hiêu tương tự (analog)
Hoạt động trong thời gian dài, ổn định
Kết nối và lập trình

Lập trình:
void setup() {
Serial.begin(9600); //Mở cổng Serial để giap tiếp | tham khảo Serial
}
void loop() {
int value = analogRead(A0); //đọc giá trị điên áp ở chân A0 - chân cảm biến
//(value luôn nằm trong khoảng 0-1023)
Serial.println(value); //xuất ra giá trị vừa đọc
//


delay(1000); //đợi 1 giây để bạn kịp tháy serial - (optional)
}
4. Cảm biến đo nồng độ bụi

5. Cảm biến siêu âm

17.Kể một số Open IoT platform.
18. Chức năng của modul ESP 8266 v1
+ Các ý:
- ESP8266 là dòng chip tích hợp Wi-Fi 2.4Ghz có thể lập trình được, rẻ tiền được sản
xuất bởi một công ty bán dẫn Trung Quốc: Espressif Systems. Được phát hành đầu
tiên vào tháng 8 năm 2014, đóng gói đưa ra thị trường dạng Mô dun ESP-01, được

sản xuất bởi bên thứ 3: AI-Thinker. Có khả năng kết nối Internet qua mạng Wi-Fi một
cách nhanh chóng và sử dụng rất ít linh kiên đi kèm. Với giá cả có thể nói là rất rẻ so
với tính năng và khả năng ESP8266 có thể làm được. ESP8266 có một cộng đồng các
nhà phát triển trên thế giới rất lớn, cung cấp nhiều Module lập trình mã nguồn mở
giúp nhiều người có thể tiếp cận và xây dựng ứng dụng rất nhanh. Hiên nay tất cả các
dòng chip ESP8266 trên thị trường đều mang nhãn ESP8266EX, là phiên bản nâng
cấp của ESP8266.

Lập trình module Wifi ESP8266 V1 bằng Uno R3:
Giới thiệu về module Wifi ESP8266 V1:
ESP8266 là một chip tích hợp cao - System on Chip (SoC), có khả năng xử lý và lưu trữ
tốt, cung cấp khả năng vượt trội để trang bị thêm tính năng wifi cho các hê thống khác
hoặc đóng vai trò như một giải pháp độc lập.
Module wifi ESP8266 v1 cung cấp khả năng kết nối mạng wifi đầy đủ và khép kín, bạn
có thể sử dụng nó để tạo một web server đơn giản hoặc sử dụng như một access point

Thông số kỹ thuật:


Wifi 802.11 b/g/n
Wifi 2.4 GHz, hỗ trợ WPA/WPA2
Chuẩn điên áp hoạt động 3.3V
Chuẩn giao tiếp nối tiếp UART với tốc độ Baud lên đến 115200
Có 3 chế độ hoạt động: Client, Access Point, Both Client and Access Point
Hỗ trợ các chuẩn bảo mật như: OPEN, WEP, WPA_PSK, WPA2_PSK,
WPA_WPA2_PSK
Hỗ trợ cả 2 giao tiếp TCP và UDP
Tích hợp công suất thấp 32-bit CPU có thể được sử dụng như là bộ vi xử lý
ứng dụng
SDIO 1.1 / 2.0, SPI, UART


URXD(RX) — dùng để nhận tín hiêu trong giao tiếp UART với vi điều khiển
VCC — đầu vào 3.3V
GPIO 0 — kéo xuống thấp cho chế độ upload bootloader
RST — chân reset cứng của module, kéo xuống mass để reset
GPIO 2 — thường được dùng như một cổng TX trong giao tiếp UART để debug lỗi
CH_PD — kích hoạt chip, sử dụng cho Flash Boot và updating lại module, nối với
mức cao
GND — nối với mass
UTXD (TX) — dùng để truyền tín hiêu trong giao tiếp UART với vi điều khiển
Kết nối ESP6286 v1 với arduino (slide)
Tập lệnh AT (slide)


19.ESP8266 12E (mở rộng)

NodeMCU V1.0 được phát triển dựa trên Chip WiFi ESP8266EX bên trong
Module ESP-12E dễ dàng kết nối WiFi với một vài thao tác. Board còn tích hợp ICCP2102, giúp
dễ dàng giao tiếp với máy tính thông qua Micro USB để thao tác với board. Và có sẳn nút nhấn,
led để tiên qua quá trình học, nghiên cứu.
Với kích thước nhỏ gọn, linh hoạt board dễ dàng liên kết với các thiết bị ngoại vi để tạo thành
project, sản phẩm mẫu một cách nhanh chóng.
Thông số kỹ thuật:
Chip: ESP8266EX
WiFi: 2.4 GHz hỗ trợ chuẩn 802.11 b/g/n
Điên áp hoạt động: 3.3V
Điên áp vào: 5V thông qua cổng USB
Số chân I/O: 11 (tất cả các chân I/O đều có Interrupt/PWM/I2C/One-wire,
trừ chân D0)
Số chân Analog Input: 1 (điên áp vào tối đa 3.3V)

Bộ nhớ Flash: 4MB
Giao tiếp: Cable Micro USB
Hỗ trợ bảo mật: WPA/WPA2
Tích hợp giao thức TCP/IP
 Lập trình trên các ngôn ngữ: C/C++, Micropython, NodeMCU – Lua


Lập trình ESP 12E bằng Arduino IDE
-

Lấy giá trị nhiêt độ và độ ẩm từ DHT11 lên thinkspeak

- Cài đặt thư viên
Thư viện

Li
nk

DHT

/>
ThingSpeak

/>
#include <DHT.h> // Including library for dht
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <Wire.h> // This library is already built in to the Arduino IDE
String apiKey = "JK3EQQVFU03VE850";

// Enter your Write API key from ThingSpeak
const char* ssid = "Nokia";
// Give your wifi network name
const char* password = "12345678"; // Give your wifi network password
const char* server = "api.thingspeak.com";
#define DHTPIN 5
//pin D1 where the dht11 is connected
DHT dht(DHTPIN, DHT11);
WiFiClient client;
void setup()
{
Serial.begin(9600);
delay(10);
dht.begin();
Serial.println("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{


delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void loop()
{
float h = dht.readHumidity();

float t = dht.readTemperature();
if (isnan(h) || isnan(t))
{
Serial.println("Failed to read from DHT sensor!");
return;
}
if (client.connect(server,80)) // "184.106.153.149" or api.thingspeak.com
{
String postStr = apiKey;
postStr +="&field1=";
postStr += String(t);
postStr +="&field2=";
postStr += String(h);
postStr += "\r\n\r\n";
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" degrees Celcius, Humidity: ");
Serial.print(h);
Serial.println("%. Send to Thingspeak.");
}
client.stop();

Serial.println("Waiting...");


// thingspeak needs minimum 15 sec delay between updates, i've set it to 30 seconds
delay(1000);
}



×