Chương 2: Truyền dữ liệu lên internet
Tải bản đầy đủ - 0trang
Đồ án chuyên ngành
SVTH: Phạm Văn Công
2.1 Module Wifi Esp8266
Module Wifi Esp8266 thiết bị giá rẻ được sử dụng rộng rãi trong các hệ thống IoT.
ESP8266 (Hình 2.2) là một vi xử lí 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 cung cấp khả năng kết nối mạng wifi đầy đủ và khép kí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.
a
Hình 2.2 Dạng đóng gói và cấu trúc của Module Wifi Esp8266
Các thơng số cơ bản của Module Wifi Esp8266:
• CPU của module là loại Tensilica L106 32-bit RISC processor, có tốc độ tối
•
•
đa là 160Mhz.
Bộ nhớ Ram tối đa là 50kB, bộ nhớ Rom 1MB.
Có đầy đủ các module thơng dụng như các vi điều khiển thịnh hành như:
•
•
•
•
•
UART, ADC, PWM, I2C, SPI, …
Hỗ trợ chuẩn 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
14
Đồ án chun ngành
•
•
SVTH: Phạm Văn Cơng
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
• Làm việc như các máy chủ có thể kết nối với 5 máy trạm.
Để dễ dàng cho việc nạp chương trình và sử dụng module Esp8266 được tích hợp
thêm chip nap CP2102 được phát triển thành một kit có tên là NodeMCU có sơ đồ
chân như Hình 2.3.
Hình 2.3 Sơ đồ chân của kit phát triển NodeMCU
Phần mềm lập trình cho Esp8266
Esp8266 có hai cách để lập trình:
− Dùng tập lệnh AT mà nhà sản xuất đưa ra để cấu hình cũng như truyền nhận
dữ liệu qua Esp8266. Lệnh AT được nạp vào Esp8266 từ một vi xử lí hoặc từ
máy tính thơng chuẩn giao tiếp UART. Phương pháp hiện tại khơng còn được
sử dụng nhiều trong lập trình Esp8266 bởi thời gian nạp lệnh AT khá lớn, bất
tiện trong việc lập trình cho các vi xử lí, ….
15
Đồ án chun ngành
SVTH: Phạm Văn Cơng
− Để khắc phục các khó khăn khi sử dụng tập lệnh AT để lập trình cho
Esp8266 ta đưa ra các giải pháp mới là ta lập trình Esp8266 như các vi điều
khiển thơng thường và sử dụng trình biên dịch Arduino IDE để lập trình.
Hình 2.4 Trình biên dịch Arduino IDE
16
Đồ án chun ngành
SVTH: Phạm Văn Cơng
2.2 Nền tảng Nodejs
Hình 2.5 Nodejs
Node.js là một hệ thống phần mềm được thiết kế để viết các ứng dụng internet có
khả năng mở rộng, đặc biệt là máy chủ web.
Nodejs là một nền tảng (Platform) phát triển độc lập được xây dựng ở trên Javascript
Runtime của Chrome mà chúng ta có thể xây dựng được các ứng dụng mạng một
cách nhanh chóng và dễ dàng mở rộng. Nodejs được xây dựng và phát triển từ năm
2009, bảo trợ bởi công ty Joyent, trụ sở tại California, Hoa Kỳ. Phần Core bên dưới
của Nodejs được viết hầu hết bằng C++ nên cho tốc độ xử lý và hiệu năng khá cao.
Nodejs tạo ra được các ứng dụng có tốc độ xử lý nhanh, realtime thời gian thực.
Các ứng dụng có thể và nên viết bằng Nodejs:
•
Websocket server: Các máy chủ web socket như là Online Chat, Game
Server…
•
Fast File Upload Client: là các chương trình upload file tốc độ cao.
•
Ad Server: Các máy chủ quảng cáo.
17
Đồ án chun ngành
SVTH: Phạm Văn Cơng
•
Cloud Services: Các dịch vụ đám mây.
•
RESTful API: đây là những ứng dụng mà được sử dụng cho các ứng dụng
khác thơng qua API.
•
Any Real-time Data Application: bất kỳ một ứng dụng nào có yêu cầu về tốc
độ thời gian thực. Micro Services: Ý tưởng của micro services là chia nhỏ
một ứng dụng lớn thành các dịch vụ nhỏ và kết nối chúng lại với nhau.
Nodejs có thể làm tốt điều này.
Trong đề tài sử Nodejs để thiết kế một Websocket server: Để có thể sử dụng được
Nodejs đầu tiên ta phải dowload và cài đặt mơi trường Nodejs cho máy tính. Sử
dụng các trình biên dịch như Visual Studio Code, Adobe Dreamweave, sublime text,
Notepad, … để viết code cho server.
2.3 Đưa server ra ngoài internet
Sau khi viết được server Nodejs để có sử dụng server đó ở mọi nơi thì ta cần phải
đưa server đó ra ngoài internet.Và Heroku là một nền tảng làm được điều đó.
Heroku là một nền tảng đám mây dựa trên ứng dụng container dưới dạng dịch
vụ(PaaS) và Heroku cung cấp phương tiện để các nhà phát triển dễ dàng đưa các
ứng dụng của họ ra ngoài thị trường.
18
Đồ án chuyên ngành
SVTH: Phạm Văn Cơng
Chương 3: Thiết kế
Esp8266
Arduino
BH1750
Hình 3.1 Sơ đồ thiết kế
Trong đề tài vi điều khiên được sử dụng là Atmega328p, được phát triển thành một
board Arduino Uno. Arduino có giá thành rẻ, dễ dàng lập trình phù hợp với các dự
án nhỏ,
19
Đồ án chuyên ngành
SVTH: Phạm Văn Công
3.1 Đo giá độ rọi sáng
Sơ đồ kết nối giữa cảm biến BH1750 với Arduino được mơ tả hình 3.2
Hình 3.2 Cách kết nối giữa Arduino và BH1750
Cảm biến BH1750 gai tiếp với arduino thông qua chuẩn I2C.
Cách đọc giá trị độ rọi sáng từ cảm biến bằng chuẩn I2C trong Arduino như sau:
Bước 1:
Star
0100011
t
Bước 2:
Start
0100011
Byte thấp
0
Ack
1
____
Ack
Mã lệnh (opecode)
Ack
Byte cao
Ack
Stop
Ack
Stop
20
Đồ án chun ngành
SVTH: Phạm Văn Cơng
Như cách kết nối ở hình 3.2 thì chân ADD được nối với GND nên địa chi của cảm
biến BH1750 là 0100011B.
Dưới đây là một cách đọc dữ liệu từ cảm biến bằng Arduino.
Bảng 3.1. Cách đọc dữ liệu từ cảm biến
C code
Comments
Gửi tín hiệu Start.
Trong đó:
TWCR = (1<
(1<
while (!(TWCR & (1<
• 1<
set khi cơng việc hồn tất. Ghi “1” vào bit này để
clear
• 1<
chuyển đổi
• 1<
• while (! (TWCR & (1<
TWINT được set.
TWDR=0x46: 0x46=01000110B, với 7 bit
•
TWDR=0x46;
TWCR = (1<
while (!(TWCR & (1<
đầu là địa chỉ của cảm biến
•
TWCR = (1<
ngắt.
while (! (TWCR & (1<
TWINT được set.
•
•
TWDR=0x10;
TWCR = (1<
while (!(TWCR & (1<
Gửi mã lệnh 0x10 = 00010000B lên cảm biến.
Cấu hình cảm biến đo giá trị có độ phân giải 1
lux, thời gian đo là 120ms. Các mã lệnh cấu
hình cho cảm biến cho bảng 1.5
TWCR = (1<
ngắt.
while (! (TWCR & (1<
TWINT được set.
•
•
TWCR= (1<
(1<
TWCR = (1<
(1<
while (!(TWCR & (1<
•
Gửi tín hiệu Stop
•
Gửi tín hiệu Start.
21
Đồ án chun ngành
TWDR=0x47;
TWCR = (1<
while (!(TWCR & (1<
SVTH: Phạm Văn Cơng
•
•
•
TWCR =
(1<
TWDR=0x47: 0x47=01000111B, với 7 bit
đầu là địa chỉ của cảm biến
TWCR = (1<
ngắt.
while (! (TWCR & (1<
TWINT được set.
•
•
Đọc byte cao
Giá trị trả về là giá trị của thanh ghi TWDR
•
•
Đọc byte thấp
Giá trị trả về là giá trị của thanh ghi TWDR
•
Gửi tín hiệu Stop
while (!(TWCR & (1<
return TWDR;
TWCR = (1<
while (!(TWCR & (1<
return TWDR;
TWCR= (1<
(1<
Sau khi đo được giá trị độ rọi sáng ta cần gửi giá trị đó đến Esp8266. Và được gửi
thông qua chuẩn giao tiếp UART với tốc độ Baud là 115200.
Luu đồ thuật toán của quá trình đo và gửi dữ liệu trên Arduino được mơ tả ở hình
3.2
22
Đồ án chun ngành
SVTH: Phạm Văn Cơng
Hình 3.3 Lưu đồ thuật toán thực hiện trên Arduino.
Thuật toán chi tiết được trình bày ở phần Phụ Lục.
3.2 Gửi dữ liệu lên internet.
Cách kết nối giữa Arduino và Node MCU như hình 3.3. Arduino truyền nhận dữ
liệu với NodeMCU thơng qua chuẩn giao tiếp UART. Sử dụng thư viện
“SoftwareSerial” để tạo giả lập một UART trong đó, chân 2 và 3 trên Arduino là
chân đóng vai trò là TX và RX, D1 và D2 trên NodeMCU đóng vai trò như chân
RX và TX.
Sau khi nhận được dữ liệu từ Arduino, NodeMCU sẽ gửi dữ liệu lên server. Câu
lệnh client.send("tên sự kiện ", "key", "value") trong thư viện “SocketIOClient”
dùng để gửi dữ liệu lên server.
Trong câu lệnh client.send("tên sự kiện ", "key", "value"): “ tên sự kiện”: là chuỗi
kí tự mà từ đó server phân biệt với các sự kiện gửi, nhân dữ liệu khác.
Dữ liệu gửi lên server có dạng là chuỗi Json. Ví dụ như { “giá trị 1”: “20”}, trong
đó "key" :“giá trị 1”, "value":“20”.
23
Đồ án chuyên ngành
SVTH: Phạm Văn Cơng
Hình 3.3 Cách kết nối giữa Arduino và Node MCU
Để có thể gửi dữ liệu lên server thì NodeMCU cần biết địa chỉ hay tên của server đó
và NodeMCU cần kết nối vào một mạng Wifi để truy cập vào server đó.
cambien.herokuapp.com là tên miền dịch vụ.
Hình 3.4 là lưu đồ thuật toán cho NodeMCU.
Khai báo thư viện: Các thư viện cần khai báo đó là:
SoftwareSerial: thư viện liên quan đến các tác vụ UART
SocketIOClient: là thư viện cung cấp các cung cụ thao tác với server Nodejs
ESP8266WiFi: Thư viện dùng để thiết lập các chế độ hoạt động cho NodeMCU
ESP8266WebServer: Thư viện cun cấp các công cụ để thao tác với server do chính
NodeMCU tạo ra.
24