ESP8266 là dòng chip tích hợp WiFi 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 ESP01, được sản xuất bởi bên thứ 3: AIThinker. Có khả năng kết nối Internet qua mạng WiFi 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. 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 1TRƯỜ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
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
Trang 2Mụ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
Trang 3I Giới thiệu Mô Hình – 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ị
- Quy trình 2: client-> web server -> database
Database Web Server
Người Dùng
Vi xử lý ESP8266
SHT10 (cảm biến nhiệt độ, độ ẩm)
BH1750 (Cảm biến ánh sáng) MSP430 Lauchpad
Trang 4- 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.
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
Trang 5ESP8266 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
- 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
- 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
Trang 6- 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
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 7HTTPClient 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ị
Trang 8int statuscode = http POST (buff, size); // Sử dụng phương thức POST gửi nội dung lên máy chủ
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 ());
Trang 9{
Serial println (arg);
strncpy (ssid, arg, 20 );
arg = sCmd next ();
if (arg)
{
Serial println (arg);
strncpy (pass, arg, 20 );
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.
1 CÔNG NGHỆ
a Node.js là gì?
Trang 10Node.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ụngweb, 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ụngnhanh 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ộchọc NoSQL Nó được thiết kế theo kiểu hướng đối tượng, cácbả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 địnhnà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ấtnhanh
Ưu điểm của mongoDB
- 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ỡ
- 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ínhchất ràng buộc như trong RDBMS nên khi thao tác với mongoDBthì phải hết sức cẩn thận MongoDB sử dụng sẽ hao tốn tài nguyêncủa hệ thống nhiều hơn RDBMS
Trang 112 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
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 12c 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 133 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ệnhiển thị
Trang 14b Cấu trúc code
- Luồng login:
Trang 15+ Front end gửi request đăng nhập gồm thông tin username,
password
+ Back end xử lý login:
Trang 16V 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 17THÔ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- 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ể:
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
Trang 21 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
Trang 22- 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ứcnă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)