Tài liệu Internet of things

Internet of Things (IoT) là gì?

Internet of Things (IoT) - Mạng lưới vạn vật kết nối Internet là một kịch bản

của thế giới, khi mà mỗi đồ vật, con người được cung cấp một định danh của

riêng mình, và tất cả có khả năng truyền tải, trao đổi thông tin, dữ liệu qua

một mạng duy nhất mà không cần đến sự tương tác trực tiếp giữa người với

người, hay người với máy tính. IoT đã phát triển từ sự hội tụ của công nghệ

không dây, công nghệ vi cơ điện tử và Internet[1]. Nói đơn giản là một tập

hợp các thiết bị có khả năng kết nối với nhau, với Internet và với thế giới bên

ngoài để thực hiện một công việc nào đó. Internet of things (IoT) dùng để chỉ các đối tượng có thể được nhận biết cũng như chỉ sự tồn tại của

chúng trong một kiến trúc tổng hòa mang tính kết nối: Mạng lưới vạn vật kết nối Internet, hay gọi đơn

giản hơn là Things.

IoT có thể là bộ cảm ứng được lắp ráp trong một chiếc tủ lạnh để ghi lại nhiệt độ, là một trái tim được

cấy ghép trong cơ thể con người, Hiểu đơn giản, IoT có thể khiến mọi vật giờ đây có thể giao tiếp với

nhau dễ dàng hơn và ưu điểm lớn nhất của “Thông minh” là khả năng phòng ngừa và cảnh báo tại

bất kì đâu.

Cụm từ Internet of things được đưa ra bởi Kevin Ashton vào năm 1999, tiếp sau đó nó cũng được dùng

nhiều trong các ấn phẩm đến từ các hãng và nhà phân tích. Họ cho rằng IoT là một hệ thống phức

tạp, bởi nó là một lượng lớn các đường liên kết giữa máy móc, thiết bị và dịch vụ với nhau. Ban đầu,

IoT không mang ý nghĩa tự động và thông minh. Về sau, người ta đã nghĩ đến khả năng kết hợp giữa

hai khái niệm IoT - Autonomous control lại với nhau. Nó có thể quan sát sự thay đổi và phản hồi với

môi trường xung quanh, cũng có thể tự điều khiển bản thân mà không cần kết nối mạng. Việc tích

hợp trí thông minh vào IoT còn có thể giúp các thiết bị, máy móc, phần mềm thu thập và phân tích

các dữ liệu điện tử của con người khi chúng ta tương tác với chúng. Xu hướng tất yếu trong tương lai,

con người có thể giao tiếp với máy móc chỉ qua mạng internet không dây mà không cần thêm bất cứ

hình thức trung gian nào khác.

Tài liệu Internet of things trang 1

Trang 1

Tài liệu Internet of things trang 2

Trang 2

Tài liệu Internet of things trang 3

Trang 3

Tài liệu Internet of things trang 4

Trang 4

Tài liệu Internet of things trang 5

Trang 5

Tài liệu Internet of things trang 6

Trang 6

Tài liệu Internet of things trang 7

Trang 7

Tài liệu Internet of things trang 8

Trang 8

Tài liệu Internet of things trang 9

Trang 9

Tài liệu Internet of things trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 161 trang duykhanh 8960
Bạn đang xem 10 trang mẫu của tài liệu "Tài liệu Internet of things", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Tài liệu Internet of things

Tài liệu Internet of things
 tin và khắc
 /* Handler sẽ được gọi khi master yêu cầu dữ liệu */ * phục sự cố khi không kết nối đến net work WiFi
 onRequest(handler) */
 /* In ra serial các chuẩn đoán thông tin của network */
 /************************************************* WiFi.printDiag(Serial);
  * ESP8266 * /* Enable chế độ debug */
  *************************************************/ Serial.setDebugOutput(true);
 150/155
 /* WEBSERVER */ mqtt.unSubscribe("/qos0");
 /* Máy chủ TCP tại port 80 sẽ phản hồi các HTTP request /* Thực hiện subscribe topic và publish các message */
 được gửi lên từ client */ mqtt.onSubscribe([](int sub_id)
 ESP8266WebServer server (80); /* Publish 1 message "qos0" đến topic /qos0 với QoS =0,
 /* Server bắt đầu lắng nghe các client */ và Retain = 0 */
 server.begin(); mqtt.publish("/qos0", "qos0", 0, 0);
 /* Viết dữ liệu đến các client */ /* Kết nối đến server MQTT */
 server.write(buf, len) mqtt.onConnect([]()
 /* Khởi tạo server ở địa chỉ URL, handleRoot là nội /* Subscribe topic và nhận message tại topic /qos0 */
 dung hoặc hàm sẽ thực hiện */ mqtt.subscribe("/qos0", 0)
 server.on ( "URL", handleRoot ); /* Bắt đầu truyền nhận dữ liệu với broker MQTT có url
 /* Server tương tác với client để gửi, nhận dữ liệu */ mqtt://test.mosquitto.org tại port 1883 */
 server.handleClient(); mqtt.begin("mqtt://test.mosquitto.org:1883")
 /* Trả về 1 nếu biến val có tồn tại trên server */ /* Hàm được gọi trong loop() nhằm khởi tạo MQTT, kiểm
 server.hasArg(val) tra xử lí các dữ liệu từ các topic, kiểm tra các thuộc
 /* Lấy giá trị của biến val trên server */ tính của giao thức như gói keep-a-live, QoS... */
 server.arg(val); mqtt.handle();
 /* Gửi yêu cầu cập nhật dữ liệu từ server:
 code : HTTP code /* Các hàm của thư viện PubSubClient*/
 text/html : Định dạng trả về là file HTML /* Khai báo biến espClient thuộc đối tượng client trong
 content: Nội dung sẽ trả về từ phía server */ class PubSubClient */
 server.send (code, "text/html",content); PubSubClient client(espClient);
 /* Publish gói tin "Connected!" đến topic ESP8266 */
 /* MQTT */ client.publish("ESP8266", "Connected!");
 /* /* Subscribe để nhận các message từ topic ESP8266 */
 Các thư viện hỗ trợ giao thức MQTT dành cho ESP8266 client.subscribe("ESP8266");
 trên arduino thường sử dụng là ESP8266MQTTClient /* Cài đặt server lắng nghe client ở port 1883 */
 và PubSubClient. Phần này giải thích các hàm của các client.setServer(url_server, 1883);
 thư viện /* Gọi hàm callback để thực hiện các chức năng
 */ publish/subcribe */
 /* Các hàm của thư viện ESP8266MQTTClient*/ client.setCallback(callback);
 /* Khai báo 1 biến mqtt thuộc class MQTTClient */ /* Hàm được gọi trong loop() nhằm khởi tạo MQTT, kiểm
 MQTTClient mqtt; tra
 /* Lấy dữ liệu nhận được từ topic đã subcribe */ xử lí các dữ liệu từ các topic, kiểm tra các thuộc tính
 mqtt.onData([](String topic, String data, bool cont) của giao thức như gói keep-a-live, gói tin QoS... */
 /* Hủy subcribe topic /qos0 */ client.loop();
iotmaker.vn
Internet Of Things (IoT) cho người mới bắt đầu 151/155
C - Cheatsheet
 /* CẤU TRÚC CƠ BẢN */ 123L Số nguyên có dấu 4 bytes
 Viết chú thích trên 1 dòng dùng // 123UL Số nguyên không dấu 4bytes
   ex: x++ ; // tăng x 1 đơn vị 123.0 Số thực
 /* */ Viết chú thích trên nhiều dòng. 1.23e6 Số thực dùng cơ số mũ ex: 1.23*10^3 = 1230
 ex : /************************* /* định nghĩa hằng số a kiểu nguyên, có giá trị là 1 */
   * Chú thích được viết * const int a = 1;
   * trên nhiều dòng * /* Định nghĩa hằng số x kiểu thực, có giá trị là 4.0 */
   ************************/ const float x = 4;
 /* CẤU TRÚC 1 CHƯƠNG TRÌNH */ /* Định nghĩa hằng số c kiểu integer có giá trị 49 */
 #include //include thư viện chuẩn của C const c = ‘1’; // Kí tự 1 trong mã ASCII là 49
 #include "iLib.h" //include thư viện tạo bởi người dùng /* Định nghĩa str là hằng số kiểu con trỏ, trỏ tới
 int global_var; //biến được dùng trong chương trình chuỗi “Cheasheet C” */
 /* Khai báo hàm bắt đầu của 1 chương trình C với kiểu const char * str = “Cheasheet C”;
 trả về là integer. Đối số arg kiểu int được truyền vào
 hàm */ /* KHAI BÁO BIẾN */
 int main (int arg){ /* Khai báo biến a kiểu nguyên và không gán giá trị */
  float local_var ; // Biến chỉ được dùng trong hàm main int a;
  Lệnh 1 /* khai báo a kiểu binary, b kiểu base8, c kiểu số
  ... nguyên, d kiểu số nguyên và không gán giá trị */
  Lệnh n ; int a = 0b01111011, b = 0123, c = 1, d;
 return 0; //chương trình thực hiện thành công và thoát /* Khai báo biến fa thuộc kiểu số thực float */
 } float fa = 1.0f;
 /* Khai báo biến da thuộc kiểu số thực double */
 /*KIỂU DỮ LIỆU VÀ PHẠM VI */ double da = 1.0;
 boolean true | false /* Khai báo biến con trỏ và trỏ đến 1 vùng nhớ không
 char -128 - 127, 'a' '$' etc. xác định */
 unsigned char 0 - 255 char *pointer;
 byte 0 - 255 /* Khai báo biến con trỏ và trỏ về NULL (0)*/
 int -32768 - 32767 char *other_pointer = NULL;
 unsigned int 0 - 65535
 word 0 - 65535 /* CHUỖI KÍ TỰ */
 long -2147483648 - 2147483647 /* Chuỗi bao gồm kí tự kết thúc chuỗi \0 (null) */
 unsigned long 0 - 4294967295 char str1[8] = {'A','r','d','u','i','n','o','\0'};
 float -3.4028e+38 - 3.4028e+38 /* Trình biên dịch tự động thêm kí tự \0 vào cuối
 double -3.4028e+38 - 3.4028e+38 chuỗi */
 void i.e., no return value char str2[8] = {'A','r','d','u','i','n','o'};
 /* Khai báo chuỗi ,không khai báo số phần tử và gán giá
 /* ĐẶT TÊN BIẾN */ trị chuỗi */
 /* Đặt tên đúng */ char str3[] = "Arduino";
 int x; // Một biến /* Khai báo và gán giá trị cho chuỗi */
 int x = 1; // Biến được khai báo và khởi tạo char str4[8] = "Arduino";
 float x, y, z; // Nhiều biến cùng kiểu dữ liệu
 const int x = 88; // Biễn tĩnh, không ghi được /* Các hàm xử lí chuỗi thường dùng */
 int tenBien1ok; // Đặt tên biến này đúng /* Nối các kí tự từ chuỗi source tiếp vào vị trí cuối
 int ten_bien_nay_ok; của chuỗi dest */
 /* Đặt tên sai */ strcat(dest, source)
 int 2001_tensai; // Vì số ở đầu /* Tìm vị trí xuất hiện đầu tiên của kí tự c trong
 int ten-sai; // Dấu '-' không phải là alphanumberic source, trả về con trỏ chỉ tới vị trí đó hoặc null nếu
 int while; // Sai, vì dùng từ khóa vòng lặp while không tìm thấy c trong source */
 strchr(source, c)
 /* HẰNG SỐ VÀ KIỂU DỮ LIỆU */ /* Hàm trả về độ dài của chuỗi st */
 123 Số thập phân strlen(st)
 0b0111 Số nhị phân /* copy và thay các kí tự của chuỗi soure vào dest */
 0173 Số Octal - base 8 strcpy(dest, source)
 0x7B Số thập lục phân base 16 /* chép kí tự từ đầu đến n từ chuỗi source vào dest */
 123U Số nguyên không dấu strncpy(dest, source, n)
 152/155
 /* MẢNG */ /* for : Khởi tạo và gán giá trị cho i, thực hiện code
 /* Khai báo mảng 1 chiều 6 phần tử kiểu integer và gán tăng i nếu i < 10 */
 giá trị cho mỗi phần tử */ for (int i = 0; i < 10; i++) { code };
 int myPins[] = {2, 4, 8, 3, 6};
 /* Khai báo mảng 1 chiều 6 phần tử kiểu integer và /* PHÉP TOÁN VÀ TOÁN TỬ THƯỜNG DÙNG
 không gán giá trị */ /* Các toán tử thường dùng */
 int myInts[6]; = toán tử bằng
 myInts[0] = 42; // Gán giá trị 42 cho phần tử đầu tiên + toán tử cộng
 myInts[6] = 12; // LỖI ! chỉ số của mảng chỉ từ 0 đến 5 - toán tử trừ
 /* Lấy giá trị của phần tử thứ 3 trong mảng myInts */ * toán tử nhân
 int c = myInts[2]; // Có thể dùng *(myInts + 2) / toán tử chia lấy phần nguyên
 /* Lấy địa chỉ của phần tử thứ 3 trong mảng myInts */ % toán tử chia lấy phần dư
 int c = &myInts[2]; // Có thể dùng int c = myInts + int == phép so sánh bằng
 /* Trả về chiều dài của mảng myInts */ != phép so sánh không không bằng (khác)
 int length = sizeof(myInts) / sizeof(myInts[0]); < phép so sánh nhỏ hơn
 /* Khai báo 2 mảng kiểu float, arr1 có 5 phần tử, arr2 > phép so sánh lớn hơn
 có 10 phần tử */ <= phép so sánh nhỏ hơn hoặc bằng
 float arr1[5], arr2[10]; >= phép so sánh lớn hơn hoặc bằng
 /* Khai báo mảng số nguyên arr có 2 dòng, 5 cột. Tổng && phép toán logic (AND)
 cộng có 10 phần tử */ || phép toán logic (OR)
 int a[2][5]; ! phép toán logic (NOT)
 /* KHỐI LỆNH VÀ CÁC LỆNH DÙNG TRONG VÒNG LẶP */ /* Các toán tử hợp nhất */
 {} // bao gồm nhiều lệnh, thường được sử dụng trong h ++ tăng 1 đơn vị
 àm -- giảm 1 đơn vị
 /* Goto : chương trình sẽ nhảy đến nhãn (nhãn phải có += phép toán cộng và gán giá trị
 mặt trong câu lệnh chứa goto) */   ex: x = 5; x+= 1; //x = 6
 goto nhãn; -= phép toán trừ và gán giá trị
 /* Continue : Chỉ dùng trong các lệnh có vòng lặp sẽ   ex: x = 5; x-= 1; //x = 4
 chuyển qua chu kì mới của vòng lặp trong cùng nhất */ *= phép toán nhân và gán giá trị
 continue; /*   ex: x = 5; x*= 3; //x = 15
 /* Break : Dùng với các vòng lặp thoát khỏi vòng lặp /= phép toán chia lấy phần nguyên và gán giá trị
 trong cùng nhất, hoặc dùng trong cấu trúc switch..case   ex: x = 6; x/= 2; //x = 3
 để thoát ra khỏi case tương ứng */ &= phép toán logic AND và gán giá trị
 break; /*   ex: x = 0b1010; x&= 0110; //x =0b0010
 /* Return */ |= phép toán logic OR và gán giá trị
 /* Dùng cho hàm không có kiểu trả về (void) */   ex: x = 0b1010; x&= 0110; //x =0b1110
 return;
 /* Value có thể là hằng số, biến, biểu thức hoặc gọi /* Các toán tử trên bit */
 đến 1 hàm khác để trả về giá trị */ & and ^ xor
 return ; > dịch phảii
 | or ~ not
 /* LỆNH RẺ NHÁNH */
 if (x < 5) // thực thi code nếu x<5 /* THỰC THI VỚI CON TRỎ */
  { code } &reference: // lấy địa chỉ của biến mà con trỏ trỏ tới
 else if (x > 10)// thực thi code nếu x>10 *dereference:// lấy giá trị của biến mà con trỏ trỏ tới
   { code } /* khai báo biến con trỏ kiểu int trỏ tới địa chỉ của
 else { code } // thực thi code các trường hợp còn lại biến a */
 int a = 5; int *pointer = &a;
 switch (var) { // thực thi case có giá trị var
 case 1: /* CÁC KÍ TỰ ĐIỀU KHIỂN VÀ KÍ TỰ ĐẶC BIỆT */
 ... \n Nhảy xuống dòng kế tiếp canh về cột đầu tiên
 break; \t Canh cột tab ngang.
 case 2: \r Nhảy về đầu hàng, không xuống hàng.
 ... \a Tiếng kêu bip.
 break; \\ In ra dấu \
 default: \" In ra dấu "
 ... \' In ra dấu '
 } %%: In ra dấu %
 \b ~ backspace (xóa 1 ký tự ngay trước)
 /* CÁC KIỂU VÒNG LẶP */
 /* While: Thực hiện code nếu x<5 */ /* HÀM VÀ CÁC VẤN ĐỀ LIÊN QUAN */
 while (x < 5) { code }; /* Khai báo prototype của hàm max, có 2 đối số đầu vào
 /* Do-While : Thực hiện code, so sánh, nếu x<0 tiếp tục là a và b thuộc kiểu số nguyên, kết quả trả về của hàm
 thực hiện code */ kiểu số nguyên */
 do { code } while(x < 0); int max(int a, int b);
iotmaker.vn
Internet Of Things (IoT) cho người mới bắt đầu 153/155
 /* Khai báo biến c là giá trị trả về của hàm max */ SINHVIEN */
 int c = max(5,4); typedef struct sinhVien SINHVIEN;
 /* Khai báo prototype của hàm không có đối số và không /* Khai báo biến sinhVienA thuộc struct SINHVIEN */
 có kiểu trả về (void) */ SINHVIEN sinhVienA;
 void none();
 /* CÁC LỆNH XỬ LÝ TẬP TIN (#include ) */
 /* TYPEDEF- Định nghĩa kiểu dữ liệu */ /* Khai báo 1 biến con trỏ là đường dẫn của 1 file */
 /* Định nghĩa kiểu unsigned char là BYTE, khai báo các const char *filePath = "Đường/dẫn/file/document.txt";
 biến a, b thuộc kiểu BYTE */ /* Tạo 1 biến con trỏ thuộc kiểu FILE */
 typedef unsigned char BYTE; BYTE a, b; FILE *file;
 /* Mở 1 file ở đường dẫn filePath và đọc dữ liệu */
 /* KIỂU LIỆT KÊ - ENUMERATION (enum) */ file = fopen(filePath, "r");// Trả về NULL nếu thất bại
 /* khai báo kiểu dữ liệu enum là các ngày trong tuần */ /* Đóng 1 file đã mở, trả về 0 nếu thành công , ngược
 enum daysOfWeek { sunday, monday, tuesday, wednesday }; lại trả về EOF */
 /* Tạo biến toDay thuộc daysOfWeek và gán giá trị */ fclose(file);
 daysOfWeek toDay = wednesday; /* Viết kí tự c lên file đang mở, trả về EOF nếu ghi
 thất bại, trả về mã ASCII của c nếu thành công */
 /* STRUCT - KIỂU DỮ LIỆU DO NGƯỜI DÙNG ĐỊNH NGHĨA */ int fputc(int c, FILE *f);
 /* Khai báo struct sinhVien */ /* Viết chuỗi "hello" lên file đang mở */
 struct sinhVien{ int c = fputs("hello", file);
   char tenSinhVien; /* Đọc (255-1) kí tự từ file đang mở, kết quả đọc
   char MSSinhVien; được
   int tuoiSinhVien; sẽ lưu vào mảng str, việc đọc bị dừng nếu gặp kí tự
 }; '\n' hoặc EOL */
 /* Truy xuất đến thành phần MSSinhVien trong struct fgets(str, 255, file);
 sinhVien */ /* Thay đổi vị trí trỏ đến trong file của con trỏ
 sinhVien.MSSinhVien; internal file position indicator về lại đầu file */
 /* Đổi tên struct sinhVien thành 1 biến duy nhất là int fseek(file, 0, SEEK_SET);
 /* Trả về kích thước của nội dung có trong file */
 ftell(file);
www.cheatography.com/ashlyn-black/cheat-sheets/c-reference/
 154/155
Lời kết
Các thành viên tham gia đóng góp.
Để hoàn thiện nội dung của sách còn có sự đóng góp của các thành viên sau:
 • 1. Phạm Minh Tuấn (TuanPM) - Chủ biên
 • 2. Lâm Nhật Quân - Kĩ sư làm việc tại IoT Maker Việt Nam.
 • 3. Trịnh Hoàng Đức - Kĩ sư làm việc tại IoT Maker Việt Nam.
 • 4. Lê Phương Trình - Thực tập sinh tại IoT Maker Việt Nam - Sinh viên Đại Học Bách Khoa,
 chuyên ngành điện tử viễn thông, khóa học 2014.
 • 5. Trần Phúc Vinh - Thực tập sinh tại IoT Maker Việt Nam - Sinh viên Đại Học Bách Khoa,
 chuyên ngành kĩ thuật điện, khóa học 2014.
Và sự đóng góp của cộng đồng tại arduino.esp8266.vn
Lời kết.
Thật vui khi bạn đã đồng hành cùng chúng tôi đi đến hết cuốn sách này. Mục đích của cuốn sách là
giúp những người mới bắt đầu tìm hiểu về Internet Of Things (IoT) có kiến thức cơ bản và hướng đi
chính xác để nghiên cứu về IoT một cách nhanh chóng hơn. Hi vọng cuốn sách sẽ đến tay thật nhiều
bạn đam mê lĩnh vực công nghệ còn mới mẻ nhưng rất tiềm năng này. Chúc các bạn thành công trên
con đường mà mình đã chọn.
Mặc dù đã cố gắng để hoàn thành tốt nhất nội dung cho cuốn sách, tuy nhiên vẫn không tránh khỏi
những thiếu sót. Mọi ý kiến đóng góp xin gửi mail về địa chỉ support@iotmaker.vn
Ngoài ra các bạn có thể tương tác với chúng tôi qua 1 số địa chỉ:
 • 1. Webstore : iotmaker.vn/
 • 2. Facebook : www.facebook.com/iotmaker.vn/
Một số trang web đóng góp cho cộng đồng (mong nhận được sự chia sẻ và đóng góp của các bạn để
cộng đồng IoT Việt Nam nói riêng cũng như cộng đồng kĩ thuật Việt Nam nói chung ngày một phát
triển hơn):
 • 1. Về ESP8266 với Arduino : arduino.esp8266.vn/
 iotmaker.vn
Internet Of Things (IoT) cho người mới bắt đầu 155/155
 • 2. Về ESP32 : esp32.vn
 • 3. Facebook Group: www.facebook.com/groups/iotmaker/
Giấy phép sử dụng tài liệu.
 • Tài liệu tuân theo giấy phép CC-BY-NC-SA (creativecommons.org/licenses/by-nc-sa/4.0/
 legalcode)
 • Bản quyền toàn bộ tài liệu này thuộc về IoT Maker Việt Nam, bạn được miễn phí sử dụng cho
 mục đích cá nhân, học tập và sử dụng trong các dự án của mình, không được sử dụng cho mục
 đích thương mại. Nếu bạn muốn sửa chữa, phân phối lại, bạn bắt buộc phải giữ nguyên giấy
 phép và cần có sự đồng ý của IoT Maker Việt Nam.
 • Chỉ duy nhất các các nhân, tổ chức được liệt kê tại iota.edu.vn là được phép sử dụng tài liệu
 cho mục đích thương mại.

File đính kèm:

  • pdftai_lieu_internet_of_things.pdf