You are on page 1of 39

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

KHOA MẠNG MÁY TÍNH VÀ TRUYỀN THÔNG

BÁO CÁO ĐỒ ÁN
LẬP TRÌNH THIẾT BỊ IoTs
MÔN HỌC: CÔNG NGHỆ INTERNET OF THING HIỆN ĐẠI

MÃ LỚP: NT532.I21

GVHD: GS-TS LÊ TRUNG QUÂN Các thành viên trong nhóm:


1. Nguyễn Hoàng Thanh – 14520842

2. Lê Minh Thuận – 14520913

3. Phạm Lê Minh Trí – 14520998

4. Nguyễn Thành Triều – 14521005

5. Nguyễn Văn Tùng – 14521058

Ngày 20 tháng 04 năm 2018


Mục lục
I. Giới thiệu Mô Hình – Kịch bản:......................................................................0
II. Báo cáo tiến độ công việc................................................................................2
III. Giới thiệu và lập trình trên ESP8266...........................................................3
IV. Giới thiệu và lập trình trên Web Server......................................................8
1. CÔNG NGHỆ...............................................................................................8
a. Node.js là gì?..............................................................................................8
b. Framwork Express của nodejs.................................................................8
c. Mongodb....................................................................................................8
2. CÁC LUỒNG CHẠY...................................................................................9
a. Login..........................................................................................................9
b. Post data..................................................................................................10
c. Get data....................................................................................................11
3. Phân tích mã nguồn....................................................................................12
a. Mô hình MVC..........................................................................................12
b. Cấu trúc code..........................................................................................13
V. Giới thiệu và lập trình trên MSP430G2......................................................15
VI. TÀI LIỆU SỬ DỤNG, TRÍCH DẪN..........................................................34
I. Giới thiệu Mô Hình – Kịch bản:

Web Server Database

Vi xử lý Người Dùng
ESP8266

SHT10 (cảm biến nhiệt độ, độ


ẩm)

BH1750 (Cảm biến ánh sáng)


MSP430
Lauchpad

 Mô hình bao gồm :


- 1 Lauchpab MSP430 .
- 1 Vi xử lý ESP8266 .
- 1 Web server.
- 1 Database lưu trữ thông tin được gửi đến Server.
- 1 SHT10 Cảm biến nhiệt độ, độ ẩm.
- 1 BH1750 Cảm biến ánh sang.
 Kịch Bản:
- Quy trình 1 : SHT, BH -> MSP430-> ESP-> web server -> database .
- 2 Cảm biến SHT và BH sẽ đọc dữ liệu môi trường và gửi cho MSP sau
đó MSP sẽ gửi cho ESP khi ESP yêu cầu ( chu kỳ 3s). Khi nhận được
thông tin EPS sẽ gửi yêu cầu cập nhật thông tin cho Server . Server
lưu thông tin xuống Database và thống kê thành bản hiện thị.

TRANG 1
- Quy trình 2: client-> web server -> database .
- Người dùng click nút view, web browser sẽ tự động gửi request mỗi
3s 1 lần, server cập nhật thông tin weather cho client từ database.
II. Báo cáo tiến độ công việc.

TRANG 2
III. Giới thiệu và lập trình trên ESP8266.

ESP8266 là dòng chip tích hợp Wi-Fi 2.4Ghz có thể lập trình được, giá rẻ được
sản xuất bởi một công ty bán dẫn Trung Quốc: Espressif Systems.
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

Đượ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.

Thông số phần cứng

- 32-bit RISC CPU : Tensilica Xtensa LX106 chạy ở xung nhịp 80 MHz

TRANG 3
- Hổ trợ Flash ngoài từ 512KiB đến 4MiB
- 64KBytes RAM thực thi lệnh
- 96KBytes RAM dữ liệu
- 64KBytes boot ROM
- Chuẩn wifi IEEE 802.11 b/g/n, Wi-Fi 2.4 GHz
- Tích hợp TR switch, balun, LNA, khuếch đại công suất và matching
network
- Hỗ trợ WEP, WPA/WPA2, Open network
- Tích hợp giao thức TCP/IP
- Hổ trợ nhiều loại anten
- 16 chân GPIO
- Hổ trợ SDIO 2.0, UART, SPI, I²C, PWM,I²S với DMA
- 1 ADC 10-bit
- Dải nhiệt độ hoạt động rộng : -40C ~ 125C

Board mạch nhóm đang sử dụng là Wemos NodeMCU - ESP8266 CH340

Vì tính đơn giản và dễ sử dụng nên nhóm đã sử dụng Arduino SDK.

Quá trình làm việc:

- Bước 1: ModeMCU – ESP8266 cố gắng kết nối đến Access Point đã được
chỉ định trước.

- Bước 2: Gửi thông điệp “S” đến MSP430

- Bước 3: Nhận thông điệp phản hồi từ MSP430

- Bước 4: Khởi tạo một kết nối HTTP request đến máy chủ

- Bước 5: Gửi thông điệp của bước 3 đến máy chủ.

- Bước 6: Tạm nghỉ 3 giây và quay lại bước 2

Một số dòng mã lập trình trên ESP8266:

#include <Arduino.h>
#include <ESP8266WiFi.h>

TRANG 4
#include <ESP8266HTTPClient.h>
#include "SoftwareSerial.h"
#include <SerialCommand.h>
#include <string.h>

const char* SSID = "nhtcntt"; // Khai báo tên AP


const char* PASS = "123456789"; // Mật khẩu cho AP đó
String URL = "http://192.168.123.31:3000/update"; // URL của máy chủ lưu
trữ dữ liệu
SoftwareSerial sw(D1, D2, false, 128); //rx, tx khai báo các chân dùng
cho giao tiếp Serial
SerialCommand sCmd; // Giao tiếp serial với máy tính

void SendInfo2Server(uint8_t *buff, size_t size); // hàm gửi dữ liệu về


máy chủ
void RecvFromMSP430(); // Hàm nhận dữ liệu từ MSP430
void STAConnectAP(char const* ssid, char const* pass); // hàm kết nối
đến AP
void changeURL(); // Hàm thay đổi URL khi có chỉ thị từ máy tính
void changeWIFI(); // Hàm thay đổi kết nối wifi khi có chỉ thị từ máy
tính
void help();

void setup() {
Serial.begin(115200); // thiết lập tỉ lệ bit/s cho giao tiếp serial
với máy tính
sw.begin(9600); // thiết lập tỉ lệ bit/s cho giao tiếp serial với
MSP430
Serial.println("debug"); // Hiển thị lên máy tính
Serial.print("Connectting to ");
Serial.println(SSID);

sCmd.addCommand("URL", changeURL); // Thiết lập các hàm liên quan


đến các lệnh - tương tự như việc dùng command line
sCmd.addCommand("WIFI", changeWIFI);
sCmd.addCommand("help", help);

TRANG 5
STAConnectAP(SSID, PASS);
}

void loop()
{
sCmd.readSerial(); // Đọc các thông điệp từ máy tính gửi đến
RecvFromMSP430();
delay(3000); // Tạm nghỉ 5s
}

/*
Message format:
message | message | ...
*/

void RecvFromMSP430()
{
sw.write('S'); // Bắt đầu gửi kí tự S đến MSP430
uint8_t buff[100];
if(sw.available() > 0) // Xác nhận khi có thông điệp từ MSP430 gửi
về thì thực thi
{
size_t len = sw.readBytesUntil('|', buff, sizeof(buff)); // Đọc
đến khi nào gặp kí tự | thì dừng lại
if(len > 0)
{
SendInfo2Server(buff, len); // Gửi thông điệp vừa nhận lên
máy chủ
}
}
}

/*
URL: http://IPorName:80/update

TRANG 6
method: POST
http header:
User-Agent: MAC Address
Content-Type: application/json
Content-Length: length(http body)
Connection: close
http body:
{
"NhietDo" : int,
"DoAm" : int,
"AnhSang" : int
}
*/

void SendInfo2Server(uint8_t *buff, size_t size)


{
HTTPClient http; // Khởi tạo đối tượng http
http.begin(URL); // kết nối URL đã chỉ định
http.addHeader("Content-Type", "application/json"); // Thiết lập nội
dung sẽ gửi là kiểu dữ liệu JSON
http.setUserAgent(WiFi.macAddress()); // Thiết lập user agent là địa
chỉ MAC của thiết bị
int statuscode = http.POST(buff, size); // Sử dụng phương thức POST
gửi nội dung lên máy chủ
if(statuscode > 0)
{
String payload = http.getString();
}
http.end();
}

void STAConnectAP(char const* ssid, char const* pass)


{
WiFi.mode(WIFI_STA); // chuyển về chế độ station hay client để kết
nối đến AP

TRANG 7
WiFi.begin(ssid, pass); // thiết lập tên wifi và mật khẩu
// Nếu trạng thái là chưa kết nối thì cố gắng kết nối lại trong
khoảng thời gian 10s
unsigned long startTime = millis();
while( WiFi.status() != WL_CONNECTED && millis() - startTime < 10000
)
{
delay(2000);
Serial.println("Failed - Try connect");
}
if(WiFi.status() != WL_CONNECTED) return;

// Xuất dữ liệu đến máy tính dùng để debug.


Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("MAC: ");
Serial.println(WiFi.macAddress());
}

void changeURL()
{
char *arg = sCmd.next();
if(arg)
{
URL = String(arg);
}
}

void changeWIFI()
{
char ssid[20], pass[20];
ssid[0] = '\0';
pass[0] = '\0';
char *arg = sCmd.next();

TRANG 8
if(arg)
{
Serial.println(arg);
strncpy(ssid, arg, 20);
arg = sCmd.next();
if(arg)
{
Serial.println(arg);
strncpy(pass, arg, 20);
WiFi.disconnect();
STAConnectAP(ssid, pass);
}
else
{
WiFi.disconnect();
STAConnectAP(ssid, NULL);
}
}
}

void help()
{
Serial.println("Use: ");
Serial.println("URL|<url> - example: URL|http://IP/path");
Serial.println("WIFI|SSID|[PASSWORD]");
}

IV. Giới thiệu và lập trình trên Web Server.

TRANG 9
1. CÔNG NGHỆ
a. Node.js là gì?

Node.js là một nền tảng chạy trên môi trường V8 JavaScript runtime -
một trình thông dịch JavaScript cực nhanh chạy trên trình duyệt Chrome

b. Framwork Express của nodejs


Express là một framework nhỏ và tiện ích để xây dựng các ứng dụng
web, cung cấp một lượng lớn của tính năng mạnh mẽ để phát triển các
ứng dụng web và mobile. Nó rất dễ dàng để phát triển các ứng dụng
nhanh dựa trên Node.js cho các ứng dụng Web

c. Mongodb
MongoDB là gì?

- MongoDB là một hệ quản trị cơ sở dữ liệu mã nguồn mở thuộc


học NoSQL. Nó được thiết kế theo kiểu hướng đối tượng, các
bảng trong MongoDB được cấu trúc rất linh hoạt, cho phép các dữ
liệu lưu trữ trên bảng không cần tuân theo một cấu trúc nhất định
nào cả (điều này rất thích hợp để làm big data).
- MongoDB lưu trữ dữ liệu theo hướng tài liệu (document), các dữ
liệu được lưu trữ trong document kiểu JSON nên truy vấn sẽ rất
nhanh.
Ưu điểm của mongoDB.

TRANG 10
- Schema linh hoạt: Do MongoDB sử dụng lưu trữ dữ liệu dưới
dạng Document JSON nên mỗi một collection sẽ các các kích cỡ
và các document khác nhau.
- Cấu trúc đối tượng rõ ràng: Tuy rằng cấu trúc của dữ liệu là linh
hoạt nhưng đối tượng của nó được xác định rất rõ ràng. Sử dụng
bộ nhớ nội tại, nên truy vấn sẽ rất nhanh.
- MongoDB rất dễ mở rộng.
- Không có các join: Điều này cũng góp phần tạo nên tốc độ truy
vấn cực nhanh trên mongoDB.
- MongoDB phù hợp cho các ứng dụng realtime.
Nhược điểm của mongoDB.

Điều đầu tiên phải kể đến ở đây là MongoDB không có các tính
chất ràng buộc như trong RDBMS nên khi thao tác với mongoDB
thì phải hết sức cẩn thận. MongoDB sử dụng sẽ hao tốn tài nguyên
của hệ thống nhiều hơn RDBMS.

2. CÁC LUỒNG CHẠY


a. Login
Bước 1: Nhập username, password
Bước 2: Web browser gửi request lên server
Bước 3: Server check user với database
Bước 4: Nếu tồn tại user thì tạo token và lưu lại token và gửi response
cho web browser

TRANG 11
Bước 5: Browser thông báo đăng nhập thành công cho admin

b. Post data
Bước 1: ESP gửi request và data lên web server
Bước 2: Web server lưu data xuống database
Bước 3: Trả về kết quả cho ESP

TRANG 12
c. Get data
Bước 1: Admin click view
Bước 2: Web browser gửi request xem thông tin và token
Bước 3: Web server check token với database
Bước 4: Nếu tồn tại token web server sẽ lấy dữ liệu từ database và gửi
response về cho web browser
Bước 5: Web browser hiển thị thông tin lên màn hình cho admin

TRANG 13
3. Phân tích mã nguồn
a. Mô hình MVC
- M là Model: cấu trúc dữ liệu theo cách tin cậy và chuẩn bị dữ liệu
theo lệnh của controller
- V là View: Hiển thị dữ liệu cho người dùng theo cách dễ hiểu dựa
trên hành động của người dùng.
- C là Controller: Nhận lệnh từ người dùng, gửi lệnh đến cho Model
để cập nhập dữ liệu, truyền lệnh đến View để cập nhập giao diện
hiển thị.

TRANG 14
b. Cấu trúc code

TRANG 15
- Luồng login:
+ Front end gửi request đăng nhập gồm thông tin username,
password

+ Back end xử lý login:

TRANG 16
V. Giới thiệu và lập trình trên MSP430G2

MSP430G2
Thuộc dòng Kit Lauchpad giá rẻ từ hãng sản xuất TI danh tiếng, MSP430
Lauchpad là kit thí nghiệm được rất nhiều các bạn sinh viên, người nghiên
cứu và các trường đại học lựa chọn hiện nay

TRANG 17
THÔNG SỐ KỸ THUẬT:
- MCU dòng DIP 20 chân MSP420G2xxx.
- Mạch nạp và Debug tích hợp sẵn trên board.
- Có led RGB và nút nhấn tích hợp sẵn.
- Tặng kèm thạch anh 32khz cho các ứng dụng timer.
- Tặng thêm 1 vi điều khiển MSP430 trong hộp.
- Phần mềm lập trình miễn phí trên trang web của hãng.

PHẦN MỀM LẬP TRÌNH:


- Code Composer Studio
- IAR Embedded.

CÁC CHUẨN GIAO TIẾP HỖ TRỢ:


- General-purpose input/output (GPIO)
- Universal asynchronous receiver-transmitter (UART)
- Inter-Integrated Circuit (IIC)

TRANG 18
- Serial Peripheral Interface (SPI)
- Anolog to digital

CLOCK:
- Nguồn xung Clock của MSP430 được chia làm 2 lớp.

- Lớp đầu tiên là các nguồn tạo ra xung clock:


 LFXT1CLK: Bộ dao động tần số thấp/ tần số cao, nó có thể được
sử dụng với tần số
 thạch anh 32768 Hz hoặc tần số thạch anh chuẩn, hoặc bộ cộng
hưởng từ 450 KHz đến 8 MHz.

TRANG 19
 XT2CLK: Bộ dao động tần số cao. Bộ dao động này có thể được sử
dụng với thạch
 anh chuẩn, bộ cộng hưởng, hoặc nguồn xung Clock bên ngoài có
tần số từ 450 KHz đến 8 MHz.
 DCOCLK: Bộ dao động được điều khiển bằng kĩ thuật số ( DCO).
 VLOCLK : Bộ dao động tần số thấp giống DCOCLK
- Có 3 tín hiệu clock đầu ra cơ bản là :
 ACLK (Auxiliary clock ) : Có thể sử dụng nguồn LFX1CLK và
VLOCLK. Có thể tạo được tần số nhỏ hơn nữa bằng cách sử dụng
các bộ chia 1, 2, 4, 8. Dùng cho các module ngoại vi.
 MCLK (Master clock) : Có thể sử dụng nguồn LFX1CLK,
VLOCLK, XT2CLK và DCOCLK. Dùng cho hệ thống và CPU.
 SMCLK (Sub-main clock) : Cũng có thể sử dụng 4 nguồn trên và
dùng cho các module ngoại vi.
 Clock của MSP430 có thể coi là bước cải tiếp lớn so với các dòng
VĐK khác với rất nhiều ưu điểm như:
 Xung nội có sai số nhỏ ( 1 – 3% tùy dòng)
 Chỉnh tần số bằng phần mềm
 Chế độ ngủ thông minh,có thể ngủ hoặc thức dậy rất nhanh,không
bị treo khi ngủ
 Có nhiều lựa chọn nguồn xung clock riêng biệt cho từng module
- MSP430 được cung cấp các define cái giá trị DCOCTL và BCSCTL1
cho phép nhanh chóng chỉnh tần số có sẵn là 1MHZ , 8MHZ , 12MHZ ,
16MHZ . Ví dụ để chỉnh tần số 8Mhz,có thể viết:
 DCOCTL = CALDCO_1MHZ;
 BCSCTL1 = CALBC1_1MHZ;
- Hoặc cấu hình module clock chúng ta sẽ sử dụng 4 thanh ghi :
 DCOCTL : DCO control register
 BCSCTL1: Basic clock system control register
 BCSCTL2: Basic clock system control register
 BCSCTL3: Basic clock system control register

TRANG 20
UART:
- Có thể nói đây là một trong những giao tiếp phổ biến và dễ sử dụng
nhất,dùng để truyền nhận dữ liệu giữa 2 hay nhiều thiết bị khác nhau
không nhất thiết là vi điểu khiển.UART là chuẩn truyền thông không
đồng bộ (nghĩa là 2 thiết bị giao tiếp với nhau cần phải biết được các
thông số của khung truyền như tốc độ,độ dài khung,số bit stop,bit
parity....).Khi muốn dùng giao tiếp UART thì chúng ta phải khai báo
hàm khởi tạo giá trị cho các thanh ghi UART,cụ thể:
 Chọn các chân dùng UART(VĐK MSP430G2553 là P1.1 và P1.2)
để ở chức năng giao tiếp ngoại vi,tùy vào thứ tự ưu tiên chúng ta
chọn thanh ghi PxSEL và PxSEL2 cho phù hợp.
 Định dạng khung truyền dữ liệu,số bit stop,bit parity,số bit dữ liệu
bằng thanh ghi UCA0CTL0
 Cài đặt nguồn cấp xung clk
 Định tần số giao tiếp(Chú ý là module trên kit Lauchpad chỉ hỗ trợ
duy nhất tần số 9600,muốn dùng tần số khác các bạn buộc phải nối
với module UART to Com bên ngoài.
 Set cờ cho phép ngắt nhận tín hiệu.
- Một số chip MSP430 không có module UART,thường là các chip cũ
dùng module truyền thông loại USI,để biết chi tiết các bạn nên đọc trực
tiếp trong datasheet

GPIO:
- Thanh ghi dữ liệu vào PxIN :
 Mỗi Bit trong mỗi thanh ghi PxIN phản ảnh giá trị của tín hiệu vào
ở chân I/O tương ứng khi các chân này được thiết lập chức năng
I/O.
 Bit = 0: Ngã vào mức thấp
 Bit = 1: Ngã vào mức cao
- Thanh ghi dữ liệu xuất PxOUT:
 Mỗi Bit trong mỗi thanh ghi PxOUT là giá trị xuất ra trên các chân
I/O tương ứng khi khi
 các chân này được thiết lập chức năng I/O. Xuất dữ liệu có hướng
và việc tăng giảm điện
 trở thì không được phép.

TRANG 21
 Bit = 0: Ngã ra mức thấp
 Bit = 1: Ngã ra mức cao
 Nếu các chân điều khiển tăng-giảm điện trở bị mất hiệu lực thì các
Bit tương ứng trong
 thanh ghi PxOUT có tác dụng lựa chọn việc tăng giảm điện trở.
 Bit = 0: Giảm xuống.
 Bit = 1: Tăng lên
- Các thanh ghi định hướng PxDIR
 Mỗi Bit trong mỗi thanh ghi PxDIR lựa chọn định hướng của chân
I/O tương ứng, bất
 chấp chức năng đã được chọn của chân. Những Bit PxDIR cho
những chân I/O được lựa
 chọn cho những chức năng khác phải được thiết lập theo yêu cầu
của chức năng đó.
 Bit = 0: Những chân của Port được định hướng là ngã vào.
 Bit = 1: Những chân của Port được định hướng là ngã ra.
- Thanh ghi cho phép tăng/giảm điện trở PxREN
 Mỗi Bit của mỗi thanh ghi PxREN dùng để cho phép hoặc không
cho phép sự tăng/giảm
 điện trở của các chân I/O tương ứng. Những Bit tương ứng của
thanh ghi PxOUT được
 chọn nếu chân được tăng lên hoặc giảm xuống.
 Bit = 0: Tăng/giảm điện trở không được cho phép.
 Bit = 1: Tăng/giảm điện trở được cho phép.
- Thanh ghi chức năng lựa chọn PxSEL và PxSEL2
 Các chân này được đa hợp với các các chức năng của các mô đun
ngoại vi khác. Mỗi Bit
 PxSEL và PxSEL2 được sử dụng cho việc lựa chọn chức năng của
các chân: Chức năng
 I/O xuất nhập dữ liệu hoặc chức năng mô đun giao tiếp ngoai vi.

INTERRUPT:

TRANG 22
- Ngắt (interrupt) là quá trình dừng chương trình chính đang chạy để ưu
tiên thực hiện
- một chương trình khác , chương trình này được gọi là chương trình phục
vụ ngắt (ISR –
- Interrupt Service Routine) .
- MSP430 có 2 loại ngắt là ngắt khả ngụy và ngắt không khả ngụy .
 Ngắt không khả ngụy liên quan đến các hoạt động Reset,phát hiện
lỗi xong clock , sự cố về bộ nhớ Flash.Nói chung ngắt này có mức
độ ưu tiên cao nhất , ở chế độ bình thường không ảnh hưởng đến
hoạt động của chương trình . Một số chế độ đặc biệt mình sẽ hướng
dẫn trong loạt bài MSP430_Advance , sẽ viết sau,trình bày cách
điều khiển hoạt động của các ngắt không khả ngụy này như tắt chức
năng reset ở chân Reset,khởi động lại bằng phần mềm.Ngắt không
khả ngụy không điều khiển bằng bit GIE trong thanh ghi điều khiển
.
 Ngắt khả ngụy là loạt ngắt liên quan trực tiếp đến hoạt động của
hầu hết các chương trình cho phép thực hiện các chương trình gọi
từ ngắt của các cổng Inout,ngắt từ Timer , ADC , Các giao thức
truyền thông . Có hai loại ngắt khả ngụy là ngắt trong và ngắt
ngoài . Ngắt khả ngụy điều khiển bằng bit GIE trong thanh ghi điều
khiển.Tức là muốn hoạt động thì BIT GIE phải được set=1 . (đây là
một bit trong thanh ghi trạng thái SR(đọc thêm trong sách Cơ sở lý
thuyết MSP430))
- Ngắt ngoài là các ngắt do tác động của bên ngoài lên chip VD như ngắt
GPIO,ADC,Các giao thực truyền thông
- Ngắt trong là các loại ngắt sinh ra từ bên trong chip như ngắt
Timer/Counter,Watchdog.
- Hoặc có thể dùng ngắt,tức là khi nhấn nút thì Module GPIO xác nhận có
sự thay đổi điện áp và tự động chạy chương trình ngắt GPIO,bật led và
quay lại chương trình chính.
- Như vậy có thế thấy nếu hỏi vòng thì thao tác bật đèn P1.6 bị trễ một
khoảng thời gian ở _delay_cycles(),còn khi dùng ngắt thì P1.6 sáng tức
thì.Đây là một trong những điểm khác biệt giữa kỹ thuật hỏi vòng và
ngắt,cũng gần giống việc VĐK của bạn chạy 2 chương trình cùng 1 lúc
vậy(Về bản chất thì không phải).

NGẮT NGOÀI

TRANG 23
- MSP430 được thiết kế có rất nhiều ngắt ngoài(đây là 1 trong những
điểm vượt trội so với các dòng cũ như AVR,PIC..).Các cổng P1 P2 của
hầu hết MSP430 đều có ngắt.Việc điều khiển ngắt đươc thông qua các
thanh ghi PxIE , PxIES , PxIFG .
- Mỗi chân của P1 và P2 có thể làm một ngắt yêu cầu . Các chân này
được thiết lập với các thanh ghi phụ như:
 Cho phép ngắt ( PxIE) :
- Thanh ghi này cho phép ngắt trên những chân riêng rẽ.
 Bit = 0: không cho phép ngắt.
 Bit = 1: Cho phép ngắt.
- Mỗi Bit cho phép ngắt PxIE này được liên kết với cờ ngắt PxIFG tương
ứng.
- Việc ghi vào thanh ghi PxOUT và PxDIR có thể ảnh hưởng đến việc
điều chỉnh PxIE.
 Thanh ghi lựa chọn ngắt cạnh ( PxIES) :
- Lựa chọn loại ngắt khi xuất hiện sự biến đổi tín hiệu ( Nếu PxIE và GIE
được Set)
 Bit = 0: Ngắt cạnh lên
 Bit = 1: Ngắt cạnh xuống
- Thanh ghi cờ ngắt ( PxIFG)
 Cờ ngắt này được Set tự động theo chương trình đã được lập trình
trước khi xuất hiện một sự chuyển đổi tín hiệu. Cờ PxIFG phải sử
dụng chương trình để Reset.
o Bit = 0: Không có ngắt.
o Bit = 1: Có ngắt.
- Để thực hiện ngắt cần 2 bước:
 Thiết lập cấu hình Module để cho phép ngắt xảy ra và điều kiện xảy
ra ngắt
 Gọi hàm thực hiện ngắt tương ứng
- Lấy ví dụ : Đèn P1.0 nháy chu kỳ 0.5Hz,nếu nhấn nút P1.3 thì đèn P1.6
đổi giá trị ngay lập tức( sáng <-> tối)
 Thiết lập cổng vào ra,phải cài đặt P1.3 là cổng Input,có điện trở nội
kéo lên để chống nhiễu,cài đặt cho phép ngắt cạnh xuống.Cài đặt

TRANG 24
cổng Output cho các đèn P1.0 và P1.6.Cuối cùng là set BIT GIE=1
bằng hàm __bis_SR_register(GIE);(đây là một trong số các hàm
set thanh ghi trạng thái SR(đọc thêm trong sách Cơ sở lý thuyết
MSP430))
 Gọi hàm thực hiện ngắt,có bố cục giống nhau giữa các hàm ngắt
khác nhau
#pragma vector = (Tên hàm ngắt mặc định) //xem cuối bài
__interrupt void (Tên hàm ngắt do người dùng đặt)(void)
{
//Thực hiện chương trình ngắt
//Hàm xóa cờ ngắt
}

TRANG 25
SHT10

THÔNG SỐ KỸ THUẬT:
 Điện áp cung cấp: 2.4 ~ 5.5VDC.
 Dải đo độ ẩm: 0 - 100% RH.
 Độ chính xác độ ẩm: ± 4.5% RH.
 Dải đo nhiệt độ: -40 ~ 123.8℃.
 Độ chính xác nhiệt độ: ± 0.4℃.
 Tín hiệu ngõ ra: digital.
 Kích thước: 21 x 12 x 20mm.

TRANG 26
 Chuẩn kết nối: giống i2c. Giao diện nối tiếp của SHT1x được tối ưu
hóa cho bộ cảm biến đọc và tiêu thụ năng lượng hiệu quả. Cảm biến
không thể được giải quyết theo giao thức I2C; tuy nhiên, bộ cảm biến
có thể được kết nối với một bus I2C mà không gây nhiễu với các thiết
bị khác được kết nối với bus. Bộ điều khiển phải chuyển đổi giữa các
giao thức

SƠ ĐỒ ĐẤU NỐI:
 Chân S: chân xung clock.
 Chân +: chân cấp nguồn dương.
 Chân -: chân cấp nguồn âm(mass).
 Chân D: chân dữ liệu.

HIỆU SUẤT:

TRANG 27
TRANG 28
LỆNH:

LỆNH KHỞI TẠO SHT10:

PHẢN HỒI BẮT ĐẦU SHT10 KHI KHỞI TẠO BỊ LỖI:

TRANG 29
VÍ DỤ:

THANH GHI TRẠNG THÁI:

TRANG 30
CÔNG THỨC TÍNH:

TRANG 31
BH1750

Cảm biến cường độ ánh sáng BH1750 được sử dụng để đo cường độ ánh
sáng theo đơn vị lux, càm biến có ADC nội và bộ tiền xử lý nên giá trị
được trả ra là giá trị trực tiếp cường độ ánh sáng lux mà không phải qua
bất kỳ xử lý hay tính toán nào thông qua giao tiếp I2C .

THÔNG SỐ:
- Nguồn: 3~5VDC
- Giao tiếp: I2C
- Khoảng đo: 1 -> 65535 lux

TRANG 32
- Kích cỡ: 21*16*3.3mm

SƠ ĐỒ HOẠT ĐỘNG:

LỆNH:

TRANG 33
VÍ DỤ

TRANG 34
ĐỒ ÁN:

P1.6, P1.7
SHT10 Giống
P2.0,P2.1
MSP430G2 BH1750 ii2
P1.1,P1.2
ESP8266

Sử dụng source có sẵn trên github để giao tiếp giữa msp430 và các cảm biến.
Source nằm trong thư mục lib.
Sơ đồ làm việc:

TRANG 35
Cấu hình kit Msp430:

-Giao tiếp: uart, chân kết nối SHT10,


BH1750(ii2)

-Clock: 1MHz

Khởi tạo:

-SHT10

-BH1750

-Interrupt

Đo nhiệt độ, độ ẩm, ánh sáng:

-Lấy dữ liệu nhiệt độ, độ ẩm,


nếu lỗi thì kết nói lại.

-Tính toán dữ liệu.

-Lấy dữ liệu ánh sáng

Nhận lệnh từ esp8266:

-Nếu lệnh = ‘S’. thì truyền json cho


esp

VI. TÀI LIỆU SỬ DỤNG, TRÍCH DẪN


1. http://Chipfc.com
2. http://thuanbk55.blogspot.com
3. http://GitHub.com
4. express: https://viblo.asia/p/nodejs-voi-express-framework-
rQOvPKVgkYj
5. mongodb: https://www.mongodb.com/

TRANG 36
6. mô hình mvc: https://techmaster.vn/posts/33903/giai-thich-ve-
mo-hinh-mvc

TRANG 37

You might also like