Professional Documents
Culture Documents
cho ngi mi bt u
IoT Maker Vit Nam
Mc lc
Li m u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
i li v tc gi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Ai c th s dng? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Chun b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Kin thc c bn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
ESP8266. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
S chn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
ESP8285 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Arduino l g?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Mt s c im ca Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Node.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Sublime Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Ci t v chun b. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Arduino IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Ci t th vin Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Serial Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Node.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Sublime Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Tng kt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Kin thc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
u ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Digital IO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Tng kt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Kin thc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Cc khi nim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
OLED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Mn hnh OLED. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Tng kt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
ESP8266 WiFi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Ch WiFi Station . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Kin thc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Kt ni vo mng WiFi ni b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
S dng WiFiMulti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
HTTP Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Web Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Web Server l g? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Yu cu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Tng kt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Thit k ng dng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Yu cu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Phn tch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Kin thc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Thc hin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Server Nodejs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Code ESP8266 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Chun b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
ng dng m rng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Tng kt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Cc ch cu hnh WiFi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Smartconfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Kin thc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
WPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
WPS l g?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Wifi Manager. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Hot ng c bn WifiManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Chun b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
M rng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Tng kt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
MQTT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Publish, subscribe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
QoS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Retain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
LWT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
MQTT Client. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
MQTT Lens. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
MQTT.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
MOSCA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Tng kt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Websocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
u im . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Nhc im . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Yu cu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Chun b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
on code Javascript to kt ni Web Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Kt qu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Tng kt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Bo mt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
An ton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Yu cu cn bn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Bo mt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Cheatsheet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
C - Cheatsheet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Li kt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Li kt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Li m u
Internet Of Things (IoT) Internet vn vt dng nh ang ng trc mt bc ngot i n
giai on tip theo cho mt th gii hin i, vn minh. l vin cnh m mi vt u c th kt ni
vi nhau thng qua Internet khng dy. Cc doanh nghip ang c xu hng ng dng sn phm
cng ngh IoT vo sn xut ngy cng nhiu bi th trng sng to tim nng v chi ph sn xut
ngy cng thp.
Chng kin s pht trin nh v bo ca cc sn phm ng dng cng ngh IoT v th trng cng
ngh Start up tim nng ang ngy cng si ng hn bao gi ht, quyn sch ny cung cp cc
ni dung v IoT vi trit l Khng ch l thc t khng ri rc, hng n nhng ngi tr tui ,
ang v mun tp trung nng lc ca mnh cho khng gian Internet Of Things. Mong mun cho ra i
nhng sn phm c o, sng to, ngy cng hon thin v ng b c th p ng nhu cu
ca cuc sng.
Ni dung c thit k mt cch c bn gip hc vin c ci nhn tng quan v vic xy dng h
thng, sn xut thit b v d dng tham gia vo lnh vc IoT mi m.
i li v tc gi
Ch bin ca cun sch l ng Phm Minh Tun(TuanPM), c nhiu nm kinh nghim lm vic trong
mng IoT v pht trin cc th vin m ngun m cho cng ng. Tc gi xy dng cun sch ny
vi mc ch ng gp 1 phn nh nhng kin thc ca mnh vo s pht trin ca ngnh cng
nghip vn cn mi m nhng rt tim nng ny.
IDE - Vit tt ca Integrated Development Enviroment - mi trng pht trin tch hp.
void setup()
{
//comment
int a = 1;
a ++;
}
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 3/155
Phn cng s dng chnh l System On Chip (SoC) ESP8266 - c kh nng kt ni WiFi v lp trnh
c vi gi thnh r v ph bin trn th gii. Board mch s dng l board phn cng m. IoT WiFi
Uno c s chn tng thch vi cc board Arduino Uno.
Phn mm s dng lp trn my tnh cho Chip ESP8266 l Arduino, ngn ng lp trnh C/C++.
Cc phn lin quan n Server chy trn my tnh s dng NodeJS vi ngn ng lp trnh
Javascript.
Ngoi ra, bn s cn tm hiu mt s cng c v khi nim thng xuyn c s dng trong quyn
sch ny nh sau:
Git - Trnh qun l phin bn s dng rt rng ri trn th gii, Github l mt mng x hi cho
lp trnh vin da trn Git. Git gip bn qun l c m ngun, lm vic nhm, x l cc thao
tc hp nht, lch s m ngun C th trong qu trnh lm vic vi quyn sch ny, bn s
cn s dng cc th vin m ngun m cho Arduino t Github, nn vic ci t v s dng cng
c kh cn thit cho vic . Cha k, n s gip bn qun l m ngun v d n ngy cng
chuyn nghip hn.
Sublime Text - L mt trnh son tho ph bin, nhanh, nh v nhiu tnh nng hay. S dng
lp trnh. Javascript (NodeJS)
Tuy phn cng chnh thc s dng l board mch phn cng m IoT WiFi Uno,
Tt c cc phn Code u khng gii thch r chi tit API cho mi tnh nng. M
thay vo c cung cp ti ph lc Cheat Sheet (Arduino v C).
4/155
Ai c th s dng?
Cc lp trnh vin phn mm/Mobile App, Web App mun tham gia lm sn phm IoT.
C nhn mun t mnh lm cc sn phm phc v cuc sng, phc v cng vic.
Gip cho ngi khng chuyn v phn cng tip cn lm sn phm IoT d dng.
Hiu bit v quy trnh to ra sn phm phn cng, i vo mng sn xut thit b.
Trnh nhng sai st khng ng c khi pht trin v thit k sai h thng.
Chun b
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 5/155
Kin thc c bn
Trong phn ny, chng ta s bt u bng vic tm hiu tng quan v h thng IoT, tng quan v
dng chip ESP8266, ri n vic ci t cng c pht trin Arduino trn my tnh ca bn. Tip n
l vic bin dch cc d n mu, la chn trnh th vin, trnh son tho s lm vic. Kt thc chng
ny chng ta s c c ci nhn tng qut v h thng IoT, lm th no v s dng cng c g
lp trnh ng dng vi ESP8266.
Ci t tt c cc cng c.
Vi nhng ai tng hiu r ESP8266, tng lm v h thng IoT, chuyn nghip trong lp trnh
C/C++ c th b qua chng ny.
6/155
Wikipedia
Cu hi t ra l, iu g gip IoT thng minh v hiu con ngi? Ban u, ngi ta cho rng
Internet ca vn vt ch yu xoay quanh giao tip M2M (cc thit b kt ni vi nhau thng qua mt
thit b khc iu khin). Nhng khi hng n s thng minh ha, khng ch l giao tip gia
M2M na m cn phi cp n cc cm bin (sensor). V cng ng lm tng rng Sensor l
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 7/155
Tnh hnh trn th gii hin nay, tc ng ca IOT rt a dng v tch cc nhiu lnh vc: qun l h
tng, y t, xy dng v t ng ha, giao thng. John Chambers (CEO ca Cisco) cng b: Cho
n nm 2024 s c 500 t thit b c kt ni. Thc t, con s ny ln hn gn 100 ln s ngi
trn Tri t, iu cho thy vn vt nhiu hn con ngi rt nhiu. Chng ta u bit ng dng
IoT c th ni chuyn vi con ngi thng qua bn phm, thit b cng c thit k ngy cng
hon thin vi nhiu cm bin hn c th giao tip mt cch nhanh nht v chnh xc nht vi
con ngi, thu thp d liu n gin t mi ngi chng ta. Nhng quan trng nht, tuy giao tip vi
con ngi nhng ng dng IoT khng phi l con ngi.
Ngi ta cho rng, IoT l cha kha ca s thnh cng, l bc ngot v c hi ln ca tng lai.
khng b tt li pha sau, cc chnh ph v doanh nghip cn c s i mi v u t mnh tay hn
pht trin cc sn phm ng dng cng ngh Internet of things.
H thng IoT cho php ngi dng tin su hn vo vic t ng ha, phn tch, tch hp. Gip cho
vic ci thin tm nhn, tnh chnh xc, nng tm cc cng ngh v cm bin, kt ni, robot t
hiu qu cao nht.
Cc h thng IoT pht trin, khai thc cc tin b ca phn mm, gim gi thnh khi xy dng phn
cng v tn dng cc cng ngh hin i. Nhng ci tin ny lm thay i cch vn hnh ca qu
trnh sn xut sn phm, dch v, x hi, kinh t v nh hng n c chnh tr
Nhng vn quan trng nht ca h thng IoT bao gm tr thng minh nhn to, kt ni, cm bin
v cc thit b nh nhng mang tnh c ng cao, chng c m t s lc nh bn di:
bin, nhiu mng thit b ngy cng nh hn, r hn v c pht trin ph hp vi thc t
cng nh nhu cu ca ngi dng .
Ci thin vic gn kt khch hng - H thng IoT gip phn tch cc im m hin ti, tm ra
nhng sai st v chnh xc. IoT thay i iu ny mang li nhiu s gn kt hn v hiu
qu hn vi ngi dng. Mt ng dng ti cc ca hng, dch v iBeacon gip tng s lng
sn phm ti ngi tiu dng bng cch ch dn ngi dng ti khu vc c th trong ca hng
v a ra cc gi v sn phm. Chng cung cp cc thng tin chi tit, cc nh gi v sn
phm, Bn cnh chng cng c kh nng cho php ngi dng chia s cc sn phm qua
mng x hi
Ti u ha cng ngh - gip nng cao tri nghim ca khch hng cng nh ci thin vic s
dng thit b v h tr ci tin cng ngh.
Gim s hao ph - IoT gip vic qun l ti nguyn cc lnh vc c ci thin 1 cch r rng.
Cc phn tch hin ti thng cung cp cho chng ta ci nhn kha cnh bn ngoi, trong khi
IoT cung cp cc d liu, thng tin thc t qun l ti nguyn mt cch hiu qu hn.
Tng cng vic thu thp d liu - Thng thng, vic thu thp d liu b hn ch do thit
k h thng mang tnh th ng. IoT ph v s rng buc, gii hn ca thit k v to ra 1 hnh
nh chnh xc ca tt c mi th.
Kim sot an ninh - IoT to ra 1 h sinh thi m cc thit b kt ni lin tc v giao tip vi
nhau qua mng li cc kt ni. Tuy nhin, h thng thng cha ch trng n cc bin php
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 9/155
Tnh phc tp - Mt s h thng IoT c phc tp v thit k v trin khai ng dng cng
nh kh khn trong vic bo tr, nng cp h thng do s dng nhiu cng ngh cn kh mi
m.
Tnh linh hot - C nhiu s lo ngi khi cp n tnh linh hot ca h thng IoT khi tch hp
vi cc h thng khc bi cc h thng khi kt hp c th xy ra xung t v cc tnh nng s b
kha ln nhau.
Tun th cc tiu chun - Ging nh cc cng ngh khc trong lnh vc thng mi, IoT cng
phi tun th cc tiu chun, quy nh t ra trc . Tnh phc tp ca IoT lm cho vic
tun th cc tiu chun l mt th thch thc s
Nhng ng dng ca IoT vo cc lnh vc trong i sng l v cng phong ph v a dng. Chng ta
s cng im qua mt s ng dng in hnh mang li "ting tm" cho IoT:
Smart Home - Theo thng k, smart home l ng dng lin quan n IoT c tm kim nhiu
nht trn Google. Smart Home l 1 ngi nh vi rt nhiu tnh nng t ng nh bt my iu
khng kh khi bn sp v ti nh, tt n ngay khi bn ri khi nh, m kha khi ngi thn trong
gia nh ang ca nh, m garage khi bn li xe i lm v cn rt nhiu nhng tnh nng
gip nng cao cht lng cuc sng khi s dng smart home.
Connected cars - Gip nng cao nhng tri nghim cho ngi dng xe t, 1 chic Connected
car c th ti u cc hot ng ca n nh thng bo khi ht nhin liu, a ra cc cnh bo
khi c vt ti gn hoc mi y nht l xe in t li ca hng Tesla
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 11/155
ESP8266
ESP8266 l dng chip tch hp Wi-Fi 2.4Ghz c th lp trnh c, r tin c sn xut bi mt cng
ty bn dn Trung Quc: Espressif Systems.
ESP8266 c mt cng ng cc nh pht trin trn th gii rt ln, cung cp nhiu Module lp trnh
m ngun m gip nhiu ngi c th tip cn v xy dng ng dng rt nhanh.
Hin nay tt c cc dng chip ESP8266 trn th trng u mang nhn ESP8266EX, l phin bn
nng cp ca ESP8266
S chn
26 GPIO1 SPI_CS1 U0TXD
25 GPIO3 U0RXD
LU :
32 EXT_RSTT
31 RES12K
27 XTALO
29 VDDD
30 VDDA
28 XTALI
22 GPIO7 SDIO
VDD3P3 3 DATA0 SPI_MISO
20 GPIO11 SDIO
VDD_RTC 5 CMD
SPI_CS0
19 GPIO10 SDIO
TOUT ADC 6 DATA3 SPIWP HSPIWP
18 GPIO9 SDIO
CHIP_EN CHIP_EN 7 DATA2 SPIHD HSPIHD
TOUT GPIO16 8 17 VDDPST
SP. FUNCTION(S)
COMM. INTERFACE
GPIO12 10
MTMS GPIO14 19
SPI_CS2 GPIO0 15
GPIO4 16
U0RTSHSPI_CS MTDO GPIO15 13
MTCK GPIO13 12
U1TXD GPIO2 14
VDPST11
PIN NUMBER
PWM
MTDI
POWER
I/O
MISO
HSPI
MOSI
HSPI
HSPI
CLK
ADC
CONTROL
U0CTS
N/C
32-bit RISC CPU : Tensilica Xtensa LX106 chy xung nhp 80 MHz
16 chn GPIO
1 ADC 10-bit
Espressif hin h tr 3 nn tng SDK (Software Development Kit - Gi pht trin phn mm) c
lp, l: NONOS SDK, RTOS SDK v Arduino. C 3 u c nhng u im ring ph hp vi tng ng
dng nht nh, v s dng chung nhiu cc hm iu khin phn cng. Hin nay Arduino ang
c s dng rng ri bi tnh d s dng, kin trc phn mm tt v tn dng c nhiu th vin
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 13/155
cng ng
Cc API cho Timer, System, Wifi, c ghi SPI Flash, Sleep v cc Module phn cng: GPIO, SPI, IC,
PWM, IS vi DMA.
WPA2 Enterprise API: Cung cp vic qun l kt ni Wi-Fi bng ti khon s dng cc my ch
RADIUS.
TCP/UDP API: Cho kt ni internet v h tr cc Module da trn cc giao thc nh: HTTP, MQTT,
CoAP.
FOTA API: Firmware Over The Air - cp nht firmware t xa cho thit b .
ESP-Now API: S dng cc gi tin Wireless 2.4GHz trao i trc tip vi ESP8266 khc m khng
cn kt ni ti Access Point.
ESP8285
ESP8285 l mt phin bn khc sau ny ca ESP8266EX, ging hon ton ESP8266EX ngoi tr vic
thay v dng SPI FLASH bn ngoi th ESP8285 tch hp 1MiB Flash bn trong gip gim din tch phn
cng v n gin ha qu trnh sn xut.
14/155
ESP8266 cn t nht thm 7 linh kin na mi c th hot ng, trong phn kh nht l Antena.
i hi phi c sn xut, kim tra vi cc thit b hin i. Do , trn th trng xut hin nhiu
Module v Board mch pht trin m ng ht ngi dng n gin nht trong vic pht trin
ng dng. Mt s Module v Board pht trin ph bin:
Module ESP8266 ch bao gm Chip ESP8266 v cc linh kin gip chip c th hot ng c, tuy
nhin, trong qu trnh pht trin sn phm, chng ta cn phi np chng trnh cho chip trc khi
a vo hot ng thc t. Qu trnh ny l qu trnh gi d liu Binary ( bin dch trn my tnh)
xung b nh Flash ca ESP8266. a ESP8266 vo ch Np (Program) th cn phi t mc
logic 0 (0V - GND) vo chn GPIO0, ng thi RESET chip. Ri sau c th dng cc cng c np
gi Firmware t my tnh xung.
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 15/155
Hin nay cc Board mch pht trin u tch hp cc mch np t ng, ngha l phn mm s t
ng iu chnh cc chn DTR v RTS ca chip USB CDC, a ESP8266 vo ch np, sau s gi
firmware xung. Arduino IDE cng vy, n s iu chnh da trn vic khai bo Board mch s dng.
Arduino l g?
i din cho Arduino ban u l chip AVR, nhng sau ny c rt nhiu nh sn xut s dng cc
chip khc nhau nh ARM, PIC, STM32 gn y nht l ESP8266, ESP32, v RISCV vi nng lc phn
cng v phn mm i km mnh m hn nhiu.
Mt s c im ca Arduino
Chnh v khng quan tm nhiu n cch thc hot ng ca cc Module i km, nn a phn
ngi dng s kh x l c khi c cc vn pht sinh ngoi tm ca th vin.
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 17/155
Thit k IDE tt, c th d dng tch hp nhiu loi compiler, nhiu loi hardware m khng h
gim hiu nng. V d: Arduino gc cho AVR, nhng c nhiu phin bn cho STM32, PIC32,
ESP8266, ESP32 tn dng ti a cc th vin sn c.
Trnh bin dch cho Arudino l C/C++, bn c bit l khi bin dch ESP8266 non-os SDK v
ESP8266 Arduino cng dng chung trnh bin dch? Vy th hiu nng khng h thua km
Cch t chc cc th vin C/C++ theo dng OOP gip phn lp, k tha v qun l cc k tt
cho cc ng dng ln .Cc MCU ngy cng mnh m v ng dng cho n s ngy cng ln.
Cc m hnh qun l code n gin trc y (thun C) s kh.
Bn s tit kim c rt rt nhiu thi gian cho vic tp trung vo tnh nng sn phm y.
Thi bui ny, thi gian l tin v c qu nhiu th hc, lm th nn u tin ng ch.
Board mch ESP8266 WiFi Uno l mt d n m ngun m gip h tr mi trng pht trin Arduino
cho ESP8266. Gip bn c th vit 1 Sketch s dng cc th vin v hm tng t ca Arduino, c th
18/155
ESP8266 Arduino core i km vi th vin kt ni WiFi h tr TCP, UDP v cc ng dng HTTP, mDNS,
SSDP, DNS Servers. Ngoi ra cn c th thc hin cp nht OTA, s dng Filesystem dng b nh
Flash hay th SD, iu khin servos, ngoi vi SPI, I2C.
Link: github.com/iotmakervn/iot-wifi-uno-hw
Hnh 7. PINOUT
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 19/155
Node.js
Node.js l mt Javascript Run time Cross Platform (chy a h iu hnh) c xy dng da trn
m ngun m Googles V8 JavaScript engine cho Chrome (Browser). Node.js cho php cc lp trnh
vin c th xy dng ng dng Server Side, truy cp vo ti nguyn h thng v thc hin c
phn ln cc tc v h iu hnh c th thc hin bng ngn ng Javascript, hoc lin kt C++.
Hin nay trn th gii c nhiu cng ty ng dng Node.js xy dng cc h thng production ln,
nh Paypal, hoc cc microservice da trn Node.js cng c trin khai a s cc hng hng u
v cng ngh.
Ngn ng lp trnh Javascript c ci tin lin tc, hin nay l Ecmascript 6 (ES5, ES2015) v ang
c ci tin rt nhanh, vi nhiu u im nh d hc, xc tch, OOP
Mt h thng Internet Of Things y kh phc tp, bao gm thit b, Server x l kt ni, Server d
liu (Database), cc h thng cn bng ti, cc h thng phn thch, bo co d liu, tr tu nhn to.
M hnh v d ca Google IoT Core
Server l mt thnh phn khng th thiu trong h thng IoT. Vi nhiu u im ca Node.js th n
rt ph hp trong vic pht trin cc Server cho IoT trong tng lai. Ngoi ra, Node.js c cng
ng h tr rt nhiu, v khng kh tm thy 1 package cn thit, tit kim rt nhiu thi gian pht
trin ng dng.
20/155
Khng, nhng bn ng vi tht vng, cc ng dng Node.js s dng thc hin cc bi tp trong
cun sch ny kh n gin v t m ngun, cho bn vn hiu d cho trc y cha bao gi lp
trnh vi Node.js.
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 21/155
Sublime Text
Nu phn Chip, lp trnh cho ESP8266 bn c Arduino IDE, bao gm c trnh son tho. Nhng
vi Node.js th bn cn 1 trnh son tho khc. Ngoi Sublime Text, bn c th la chn cc trnh
son tho ph bin hin nay nh Atom, Visual Code, nhng ng di s dng Nodepad, mc d l
vn c.
Sublime Text l mt trnh son tho c nhiu lp trnh vin u thch hng u hin nay, bi nhiu
l do, trong tc l quan trng nht. N thc s nhanh, nhanh gn nh l s 1 trong s cc trnh
son tho hin nay. Ngoi ra n min ph (lu lu nhc mua, khung thoi m nhiu lp trnh vin bo
thiu th bun).
Ci t v chun b
Arduino IDE
Bc 1: Ci t Arduino IDE.
Bc 2: Ci t b cng c, trnh bin dch, SDK h tr chip ESP8266 trong Arudino IDE.
Vi b cng c ny, chng ta c th d dng lp trnh, bin dch v s dng cc th vin dnh cho
ESP8266 trc tip trn Arduino IDE. M Arduino IDE, trn thanh Menu chn File Preferecens, trong
tab settings chn cc ty chn nh hnh di:
Bc 3: Ci t board ESP8266.
M Boards Manager mc Tools trn thanh menu-bar tm board cn s dng vi keyword Generic
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 23/155
Ci t th vin Arduino
Trong mc libbrary manager nhp ni dung th vin cn tm ti hp thoi text box, chn phin bn,
ri nhn install, Nhng th vin c ci t s c text hin th INSTALLED u mi th vin. V
d tm th vin OLED lin quan n ESP8266:
24/155
Board ESP8266 WiFi Uno c kt ni vi my tnh qua cng USB MicroB v s dng chip CH340
chuyn i USB sang UART. V vy cn ci USB driver my tnh v board c th giao tip vi nhau.
Thc hin kt ni cable USB vi board, m bm n LED khoanh trn sng nh hnh di:
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 25/155
Mac OS
Ti bn ci t: arduino.esp8266.vn/_static/download/CH34x_Install_V1.3.pkg
Nu khng th thc hin c lnh trn, bn cn phi thay i Security and Privacy trong phn
System Preference. Chn Allow Apps Downloaded From t Mac App Store and Identified
Developers sang Anywhere - V ti CH34x_Install_V1.3.pkg v ci t li.
26/155
Sau khi kt ni v ci t xong, s xut hin cng COM o trn my tnh (Ty tng loi h iu hnh
m c nhng tn cng nh: COM1, COM2 i vi Windows, /dev/tty.wchusbserial1420 trn Mac OS,
/dev/ttyUSB0 trn Linux) M Arduino IDE v la chn (tham kho cu hnh kt ni nh hnh di):
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 27/155
Trn giao din Arduino c 2 nt, ngoi cng bn tri l nt Verify, bin dch chng trnh, tng
ng vi Sketch > Verify/Compile, nt tip theo l Upload, tng ng Sketch > Upload. Khi la
chn board ph hp, chng trnh khng c li, th nhn Upload s np chng trnh vo board v
thc thi sau .
Vi bt k tnh hung no cn file Binary, bn c th c xut ra bng cch Sketch > Export
compiled Binary, v file .bin s nm trong th mc ca Sketch.
28/155
Serial Terminal
Arduino c tch hp sn Serial Monitor, khi chn ng cng Serial, th c th nhn biu tng Serial
trn IDE m:
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 29/155
Node.js
Sublime Text
Ti v ci t ti: www.sublimetext.com/
Git
Tng kt
Ti lc ny, bn c th c ci nhn tng quan v h sinh thi, cng c v phng thc lm vic vi
ESP8266 cng nh tng quan v h thng IoT. ng thi c th bt u vic pht trin ng dng
cho ESP8266 ngay lp tc. Cc cng c c la chn u l a nn tng, d dng c s dng
cho cc h iu hnh Mac OS, Windows, hay Linux
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 31/155
Hello World
Bt k mt chng trnh hc no cng cn nn bt u mt cch t t. Bi v thi im ny chng ta
u mi bt u, nhiu khi nim, kin thc v lnh mc ny gn nh khng c nhiu. Helloworld gip
cc bn c th nm c cc kin thc c bn, lm sao bin dch, np c chng trnh. Lm
sao s dng cc th vin cng cng. Cng nh nm c mt s kin thc v kin trc chng
trnh Arduino.
32/155
Kin thc
n LED vit tt (Light Emitting Diodes) - l bng bn dn c th pht sng vi mu sc khc nhau
ty thuc vo cht liu bn dn. iu khin c bng LED cn cung cp mc in p chnh lch
gia cc m v cc dng ca bng LED cao hn mc in p Vf (datasheet), thng l 3.2v, v dng
in nh hn mc chu ng ca n, thng l 15mA.
Anode Cathode
Arduino IDE
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 33/155
Tab tn file.
u ni
Hnh 24. Mch ESP8266 WiFi Uno c u ni sn LED vo Pin 16, v nt nht vo Pin 0
Vi m ngun bn di, sau khi kim tra chng trnh, bn cn chc chn Chn Board ESP8266
WiFi Uno trong Arduino IDE v Np chng trnh xung board dng Arduino IDE
34/155
/* hm loop s c gi lin tc */
void loop() {
digitalWrite(pin_led, HIGH); // tt LED (HIGH - c ngha l mc cao)
delay(1000); // ch 1 giy
digitalWrite(pin_led, LOW); // bt LED bi mc in p LOW
delay(1000); // ch 1 giy
}
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (ledState == LOW)
ledState = HIGH; // i trng thi
else
ledState = LOW; // i trng thi
digitalWrite(ledPin, ledState);
}
}
Digital IO
Tn Pin trong Arduino (Pin number) ging vi th t chn ca ESP8266. pinMode, digitalRead, v
digitalWrite u s dng Pin Number nh nhau, v d nh c GPIO2, gi hm digitalRead(2).
Mi chn c th phc v cho mt tnh nng no , v d Serial, I2C, SPI. V tnh nng s c cu
hnh ng khi s dng th vin.
GPIO6 v GPIO11 khng c th hin bi v n c s dng cho vic kt ni vi Flash. Vic s dng 2
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 35/155
Tng kt
Cc ng dng m rng
Kin thc
Nt nhn s gip vic ESP8266 khi ng mt hnh ng no khi cn thit. Trong nhiu ng dng
chng ta hu nh u cn nhng kch hot t bn ngoi. Xuyn sut cun sch ny, s dng nt
nhn kch hot chy cc ng dng mu cng nh n LED thng bo cc trng thi. Trong
phn ny, nhn nt n LED s chuyn trng thi (t sng tt v ngc li).
Ngoi cch dng ngt xc nh nt nhn c c nhn hay khng - cch ny s tit kim ti
nguyn tnh ton ca CPU, n ch c gi khi c s kin xy ra, th cn mt cch na l hi vng:
Cch ny i hi CPU lin tc kim tra xem mc Logic ca nt nhn. ng thi vic p ng cng
khng nhanh bng s dng ngt.
36/155
void blink()
{
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite(ledPin, ledState); //o trng thi LED & in ra serial
Serial.println("Pressed, value=" + String(ledState));
}
bool isPressed()
{
return (digitalRead(btnPin) == 0);
}
void setup()
{
pinMode(ledPin, OUTPUT); // Cu hnh LED l ng ra
pinMode(btnPin, INPUT_PULLUP); // Cu hnh nt nhn l ng vo pull-up
Serial.begin(115200);
}
void loop()
{
if (isPressed()) {
blink();
}
}
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 37/155
void blink()
{
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite(ledPin, ledState);
Serial.println("Pressed, value=" + String(ledState));
}
void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
pinMode(btnPin, INPUT_PULLUP); // Cu hnh nt nhn l ng vo pull-up
attachInterrupt(btnPin, blink, FALLING); //ci t ngt cho chn LED
Serial.begin(115200);
}
void loop()
{
//Khng phi lm g
}
Cc khi nim
Ngt Ngt l mt khi nim lin quan nhiu n phn cng, mt s kin no xy ra, bt buc
CPU phi dng cc tc v bnh thng khc ang thc thi thc hin tc v Ngt. V d, cu
hnh ngt khi c thay i mc logic t 1 v 0 (cnh xung) ca GPIO, th khi mc logic thay i
trn GPIO , CPU s ngay lp tc dng v lu cc trng thi ti chng trnh chnh v nhy vo
hm ngt thc thi cc lnh trong .
OLED
Mn hnh OLED
OLED (Organic Light Emitting Diode) l loi mn hnh hin th bao gm mt lp vt liu hu c vi ch
yu l cacbon nm gia hai in cc anot v catot s t ng pht sng mi khi c dng in chy
qua. OLED s dng i-t pht quang hu c, chnh v th n khng cn ti n nn chiu sng, do
c li th v kch thc cng nh tit kim in hn so vi cc loi LCD. V sng tng i tt
mi trng sng t nhin
L mn hnh loi nh, kch thc tm 0.96 inch cho ti 1.25 inch, c dng kh rng ri trong cc sn
phm in t. Tm nn c iu khin bng chip driver SSD1306. Chip ny giao tip vi cc b iu
khin/MCU khc bng giao tip LCD
I2C (Inter-Integrated Circuit) l mt loi bus ni tip c pht trin bi hng Philips nhm truyn
nhn d liu gia cc IC. I2C s dng 2 ng truyn tn hiu, 1 ng xung nhp ng h (SCL) do
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 39/155
Bc 2: Ci t th vin ESP8266 and ESP32 OLED driver for SSD1306 display, xem thm Ci t
th vin Arduino
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 41/155
#include <Wire.h>
#include "SSD1306.h"
void loop()
{
int gio, phut, giay;
delay(1000);
thoi_gian ++;
gio = thoi_gian/3600;
phut = (thoi_gian%3600)/60;
giay = thoi_gian % 60;
display.clear();
display.drawString(0, 0, String(gio) + ":" + String(phut) + ":" + String(giay));
display.display();
}
Tng kt
Thng qua cc v d mu v iu khin n LED, nt nhn v OLED, chng ta c th trin khai thm
nhiu v d khc s dng GPIO ca ESP8266, cng nh hiu r hn v cch lm vic ca Arduino IDE,
cch np chng trnh, s dng th vin
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 43/155
ESP8266 WiFi
Kt ni WiFi chnh im mnh nht ca chip ESP8266, n c th kt ni n cc Router sn c trong
gia nh, cc Access Point vi cc tiu chun kt ni thng dng hin nay tn s 2.4GHz - ch
STA. Ngoi ra, ESP8266 cn h tr ch AP (Access Point), tc l n c th khi ng mt (hoc
nhiu) Access Point v cho php cc client khc c th kt ni vo, hoc chy ng thi c ch
STA v AP.
WiFi Access Point l mt thit b x l kt ni trung tm v phn phi cc lung d liu. Nh l vic x
l cc gi tin IP nh a ch mng LAN, nh tuyn cc gi tin t Internet v cc my trm (Station).
Thit b kt ni n Access Point c gi l Station, cc my tnh Laptop, my tnh c card WiFi khi
kt ni vo Access Point th u c gi l Station
44/155
Cc Station khi mun kt ni vo Access Point th cn xc nh thng qua BSSID, thng thng
chng ta hay gi l SSID - hay mng WiFi. Bn c th d dng xem danh snh SSID xung quanh mnh
khi scan wifi trn my tnh kt ni mng Internet.
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 45/155
Ch WiFi Station
Kin thc
Khi kt ni thnh cng vo mng WiFi th ESP8266 s khi ng DHCP Client (mc nh) xin cp
pht a ch IP trc khi bt u cc kt ni IP. Do , nu nh v l do g , m Access Point ca bn
khng c DHCP Server cp pht IP th bn phi cu hnh IP tnh cho ESP8266.
Kt ni vo mng WiFi ni b
#include <ESP8266WiFi.h>
void setup() {
// In ra tn mng wifi s kt ni n
Serial.println(ssid);
void loop() {
S dng WiFiMulti
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 47/155
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
// Khai bo bin wifiMulti thuc class ESP8266WiFiMulti s dng cc chc nng ca class ny.
ESP8266WiFiMulti wifiMulti;
// Bin connectioWasAlive nhm kim tra kt ni ca ESP8266 n mng wifi.
boolean connectioWasAlive = true;
void setup()
{
Serial.begin(115200);
Serial.println();
// Add vo cc mng wifi m ESP8266 c ch nh s kt ni
wifiMulti.addAP("primary-network-name", "pass-to-primary-network");
wifiMulti.addAP("secondary-network-name", "pass-to-secondary-network");
wifiMulti.addAP("tertiary-network-name", "pass-to-tertiary-network");
}
void monitorWiFi()
{
// Kim tra nu cha kt ni n 1 mng wifi no s ci t connectioWasAlive = false
// ng thi in ra du "." sau mi 500ms nu cha c kt ni.
if (wifiMulti.run() != WL_CONNECTED)
{
if (connectioWasAlive == true)
{
connectioWasAlive = false;
Serial.print("Looking for WiFi ");
}
Serial.print(".");
delay(500);
}
// Nu kt ni n 1 trong cc mng wifi s in ra tn mng wifi v set connectioWasAlive = true
// khi mt kt ni chng trnh s vo phn if (connectioWasAlive == true) nhm thng bo ang
// tm kim mng wifi
else if (connectioWasAlive == false)
{
connectioWasAlive = true;
Serial.printf(" connected to %s\n", WiFi.SSID().c_str());
}
}
void loop()
{
monitorWiFi();
}
HTTP Client
HTTP - Hypertext Transfer Protocol (giao thc truyn dn siu vn bn), l giao thc truyn d
liu gia cc my tnh qua www (World Wide Web), vi d liu c th l dng text, file, nh, hoc video.
HTTP c thit k trao i d liu gia Client v Server trn nn TCP/IP, n vn hnh theo c ch
yu cu/tr li, stateless - khng lu tr trng thi. Trnh duyt Web chnh l Client, v mt my ch
cha Web Site l Server. Client s kt ni ti Server, gi d liu n server bao gm cc thng tin
header. Server nhn c thng tin v cn c trn gi phn hi li cho Client. ng thi ng kt
ni.
Trong giao thc HTTP, vic thit lp kt ni ch c th xut pht t pha client ( lc ny c th gi l
HTTP Client ). Khi client gi yu cu, cng vi URL v payload ( d liu mun ly ) ti server. Server (
HTTP Server ) lng nghe mi yu cu t pha client v tr li cc yu cu y. Khi tr li xong kt ni
c chm dt.
Khi nhc ti HTTP th Hyperlink, hay URL (Uniform Resource Locator) l nhng khi nim c thy
hng ngy
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 49/155
Cu trc 1 URL
host a ch server.
D liu tr v:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
data
Trn linux, bn c th s dng curl xem chi tit d liu raw truyn nhn, g
lnh curl -v http://esp8266.vn/log.php?nhiet_do=30 trn terminal
GET l phng thc yu cu d liu n gin v thng s dng nht ca HTTP. Phng thc
GET yu cu server ch tr v d liu bng vic cung cp cc thng tin truy vn trn URL, thng
thng Server cn c vo thng tin truy vn tr v d liu m khng thay i n. path v
query trong URL cha thng tin truy vn.
PUT l phng thc yu cu to mi mt d liu, ging POST nhng nh du cho Server bit,
nu d liu khng tn ti trong c s d liu th to mi, hoc sa i n.
DELETE Tng t nh GET, nhng bo cho Server bit v vic xa d liu thng qua URL.
Cc phng thc thng thng ch dng GET v POST, cc phng thc cn li thng s dng
trong API server (RESTful). Mt s im khc bit gi POST v GET.
POST khng b catch, khng tn ti d liu gi trong lch s trnh duyt, khng th nh du
(bookmark).
D liu tr v bao gi cng c phn thng tin header vi dng u tin cha Status Code HTTP/1.1
200 OK c ngha l status code = 200, request c tr v ph hp. Theo sau l cc cp header
cha thng tin Server mun trao i vi Client, m nu l trnh duyt th n b n i (ngi dng bnh
thng khng th thy). Cc cp header ny nh dng theo kiu name: value v kt thc bng k t
xung dng khng thy bng mt thng (0x0D 0x0A hay \r\n). Trong v d trn, thng tin header
Content-Type: text/html; charset=utf-8 bo cho trnh duyt bit rng nh dng d liu gi v l
dng text, m ha utf-8. Transfer-Encoding: chunked chiu di d liu khng c bit trc v gi
cho ti khi server ng kt ni.
1xx: M trng thi thng tin. Bn cht ca m trng thi ny, ch thng bo vi client rng
request c chp nhn. Cc m trng thi thng tin ny c quy nh trong HTTP/1.1, cn
phin bn HTTP/1.0 hay trc th khng c, c th b qua phn m trng thi ny. Cc m
hay gp:
100 Continue: Thng bo cho Client bit l c th gi tip phn request cn li nu cn,
kt thc nu ht. Nu trong request POST, phn thn request ln s b server t chi v
gii quyt iu ny th client phi gi Expect: 100-continue theo sau phn header
ban u.
2xx: Nhm m trng thi ny thng bo vi Client rng request c nhn, hiu v x l
thnh cng. Vi mt s m thng thy:
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 51/155
200 OK: Thng bo cho Client bit l request gi thnh cng. C th thy m trng thi
ny trong cc phng thc GET, HEAD, POST, TRACE.
201 Created: Cho bit request x l thnh cng v ti nguyn c khi to. c
s dng xc nhn s thnh cng ca mt request PUT hoc POST.
3xx: Nhm m trng thi thng bo Client cn phi thc hin thm hnh ng hon thnh
request. M trng thi thng gp trong nhm:
4xx: Nhm m thng bo cc li t pha Client. c s dng khi server cho rng pha Client
ang xy ra li, vi mt request, hoc ti nguyn khng hp l, hoc mt request khng ng.
Cc m thng dng:
5xx: Nhm lnh thng bo server ang trong tnh trng li hoc khng c kh nng thc hin
yu cu. Mt s m thng gp:
500 Internal Server Eror: Cho bit l khng th thc hin request ca Client.
503 Service Unavailable: Xy ra khi h thng ca server ang bo dng hoc qu ti.
JSON
JSON (JavaScript Object Notation) l 1 nh dng trao i d liu gip vic c v vit d liu tr
nn d dng hn, my tnh cng s d phn tch v to ra JSON. Chng l c s da trn tp hp
ca ngn ng lp trnh JavaScript. JSON l 1 nh dng kiu text m hon ton c lp vi cc ngn
ng hon chnh, thuc h hng vi cc ngn ng trong h hng ca C, gm c C, C++, C#, Java,
JavaScript, Perl, Python, v nhiu ngn ng khc. Nhng c tnh to nn JSON 1 ngn ng
52/155
C php
{
"username" : "your-user-name",
"email" : "your-email@email.com",
"website" : "iota.edu.vn",
"title" : "IoT Stater Cource"
}
Mt ng dng n gin s dng giao thc HTTP ly t gi Bitcoin (BTC)/USD t cc trang Web giao
dch, hin th ln mn hnh OLED.
{"USD":4731.44}
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 53/155
Khi dng HTTPS, chng ta cn cung cp SHA1 Fingerpint Client c th xc thc server. Bn c th
dng trnh duyt truy cp trc ly. Nu l Chrome, sau khi truy cp vo a ch min-
api.cryptocompare.com/data/price?fsym=BTC&tsyms=USD, Nhn Ctrl+Shift+I (Shift + + I vi MacOS)
v i n Security > View Certificate > Details > Thumbprint. Bn s thy hnh nh bn di, v copy
n.
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h> //https://github.com/bblanchon/ArduinoJson
#include "SSD1306.h" //https://github.com/squix78/esp8266-oled-ssd1306
void getBitcoin()
{
HTTPClient http;
Serial.print("connecting to ");
Serial.println(host);
http.begin(host, fingerprint);
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
StaticJsonBuffer<512> jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(payload);
if (!root.success()) {
Serial.println("parseObject() failed");
return;
}
void setup() {
Serial.begin(115200);
display.init();
display.clear();
display.setFont(ArialMT_Plain_16);
display.drawString(0, 0, "Connecting to");
display.drawString(0, 18, ssid);
display.display();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
display.clear();
display.drawString(0, 0, "Connected");
display.display();
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
getBitcoin();
}
delay(5000);
}
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 55/155
ESP8266 c kh nng cho php cc thit b khc (Station - STA) truy cp vo v hot ng nh l 1
Access Point, c th t thit lp 1 mng WiFi ni b, vi kh nng khi ng DHCP Client v cung cp
c IP cho cc Client kt ni ti. Do gii hn v RAM, nn s lng ti a cc STA c th kt ni n
mt ESP8266 hin ti l 5.
Khi to mng
Mt mng WiFi n gin nht ch cn cung cp tn SSID v khng mt khu WiFi.softAP(ssid). Phc
tp hn, bn cung cp mt khu cho mng WiFi WiFi.softAP(ssid, password), hoc chi tit
WiFi.softAP(ssid, password, channel, hidden) khi cung cp chnh xc knh truyn (1..13), mc nh 1 v
n n i, khng hin th ra khi hidden = true
Nh rng ssid s dng chui k t khng qu 63, v mt khu (c th khng cn) vi ti thiu 8 k t
cho mng WPA2-PSK
IPAddress local_IP(192,168,4,22);
IPAddress gateway(192,168,4,9);
IPAddress subnet(255,255,255,0);
WiFi.softAPConfig(local_IP, gateway, subnet)
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 57/155
#include <ESP8266WiFi.h>
void setup() {
Serial.begin(115200);
Serial.print("Configuring access point...");
char ssid[64];
sprintf(ssid, "AP-%06X", ESP.getChipId());
WiFi.softAP(ssid, password);
void loop() {
Serial.printf("Stations connected = %d\n", WiFi.softAPgetStationNum());
delay(3000);
}
Web Server
Web Server l g?
Web Server l mt my ch Web m khi c bt k mt Web Client no (chng hn Web Browser) truy
cp vo, th n s cn c trn cc thng tin yu cu truy cp x l, v phn hi li ni dung. a
phn cc ni dung Web Server phc v l HTML, Javascript, CSS, JSON v bao gm c cc d liu
Binary.
Mc nh cc Web Server phc v trn Port 80, v 443 cho dch v Web c bo mt HTTPS
HTML, Javascript v CSS l ba ngn ng xy dng v pht trin Web. Nhng hiu bit c bn v
chng s to iu kin thun li cho cc qu trnh tip theo sau c d dng hn.
HTML
Cu trc 1 tag
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 59/155
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<h1>This is a Heading</h1>
<p>This is a paragraph.</p>
</body>
</html>
Vi mt s tag c bn nh sau:
Javascript
nhng chng trnh vit bng Javascript vo trang HTML, ch cn thm tag <script> v thuc tnh
type. C th thm phn ny phn <head> hoc phn <body> ca HTML. V d sau y minh ha
vic thm mt chng trnh Javascript vo phn thn (<body>) ca HTML:
60/155
<!DOCTYPE html>
<html>
<head>
<title>My first JavaScript page</title>
</head>
<body>
<script type="text/javascript">
// chng trnh Javascript nn c vit y
// ngay trc </body>
</script>
</body>
</html>
CSS
vng-chn {
thuc-tnh-a: gi-tr-x;
thuc-tnh-b: gi-tr-y;
.....
}
<!DOCTYPE html>
<html>
<head>
<title>My first JavaScript page</title>
<style>
.class-select {
background-color: red;
}
#id-select {
background-color: green;
}
div {
color: blue;
}
</style>
</head>
<body>
<div id="id-select"> css select by id </div>
<div class="class-select"> css select by class </div>
</body>
</html>
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 61/155
ESP8266 hon ton c th thc hin vai tr Web Server phc v cho mt vi kt ni n, tn dng
giao din Web iu khin, cu hnh cho n.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
void setup(void){
pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(115200);
WiFi.begin(ssid, password);
server.on("/", handleRoot);
server.on("/on", handleOn);
server.on("/off", handleOff);
server.begin();
Serial.println("HTTP server started");
}
void loop(void){
server.handleClient();
}
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 63/155
Yu cu
Khng cn bt k mt Router, hay Access Point no, thc hin vic kt ni giao tip gia 2
ESP8266 thng qua mng WiFi, 2 Board ny s truyn d liu vi nhau mi giy, v hin th ln
Serial Terminal
Sau mi giy, Board ESP8266 ny s gi d liu vo Board kia, board nhn c d liu s in ra
cng Serial v gi ngc li.
Code
P2P server
#include <ESP8266WiFi.h>
#define PORT 23
// Gioi han so luong clients ket noi
#define MAX_CLIENTS 3
void setup() {
Serial.begin(115200);
Serial.println();
Serial.print("Setting soft-AP configuration ... ");
//Cau hinh acces point, cai dat soft AP de client ket noi vao.
WiFi.softAPConfig(local_IP, gateway, subnet);
WiFi.softAP(ssid, password);
void loop() {
uint8_t i;
// kiem tra co client moi ket noi khong
if (server.hasClient()) {
for (i = 0; i < MAX_CLIENTS; i++) {
if (!clients[i] || !clients[i].connected())
{ if (clients[i]) clients[i].stop();
clients[i] = server.available();
Serial.print("New client: "); Serial1.print(i);
continue;
}
}
WiFiClient serverClient = server.available();
serverClient.stop();
}
// Kiem tra neu so client ket noi MAX_CLIENTS
// co client, client duoc ket noi va o trang thai available
// doc du lieu tu client, va gui lai du lieu cho client do.
for (i = 0; i < MAX_CLIENTS; i++) {
if (clients[i] && clients[i].connected()) {
if (clients[i].available()) {
String line = clients[i].readStringUntil('\r');
Serial.print("Server receive from Client:");
Serial.println(line);
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 65/155
P2P client
#include "ESP8266WiFi.h"
// Ten va mat khau cua ESP8266 AP lam server se vao
const char *ssid = "yourSSID";
const char *password = "yourPassword";
void setup() {
uint8_t i = 0;
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("\nConnecting to ");
Serial.println(ssid);
// Kiem tra tnh trang ket noi, neu chua ket noi duoc
// se in chuoi "connecting..." tren man hinh serial terminal.
while (WiFi.status() != WL_CONNECTED) {
Serial.println("Connecting...");
delay(500);
}
}
Tng kt
Trong phn ny, chng ta nm r cc ch hot ng ca ESP8266, cc giao thc truyn
TCP/IP, HTTP v cc nh dng HTML, CSS, Javascript. Ngoi cc v d thc tin s dng ESP8266 nh
HTTP Client hng dn trn, bn c th s dng HTTPClient kt ni n cc Server t to, gi d
liu cm bin n Server, cng nh ly d liu t Server thc thi cc tc v.
Ch WiFi Access Point v Web Server chy trn ESP8266 thng s dng cu hnh cc thng
s cho sn phm, s dng giao din Web c bt k my tnh no cung cp cc thng s phc
tp cho ng dng mt cch d dng.
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 67/155
D n c cm bin DHT11
v gi v Server
Trong bi ny chng ta s xy dng ng dng dng cm bin DHT11 thu thp nhit , m ca
mi trng. Thng tin v nhit v m s c hin th trn my tnh v hin th trn trnh duyt
web bng cch truy cp vo 1 a ch URL c ch nh. Mt s kin thc cn thit :
Nhit l i lng th hin tnh cht vt l nng, lnh ca vt cht. Nhit c o bng
cc n v khc nhau v c th bin i bng cc cng thc. Trong h o lng quc t, nhit
c o bng n v Kelvin, k hiu l K. Trong i sng Vit Nam v nhiu nc, n c
o bng C.
Thit k ng dng
Hnh nh bn di m t tng quan d n
Trong thc t, khi thit k ng dng, ngi dng cn mt giao din gim st v iu khin thn thin,
ng thi c th pht trin thm cc tnh nng nh hin th kt qu di dng th (chart), lu tr
d liu theo thi gian ch nh hay iu khin trng thi cc thit b ch vi 1 click chut trn my tnh.
Cc d n vi m hnh phc tp s cn qun l cc kt ni cng nh d liu ca cc thit b
Chng ta s gii quyt nhng vn trn thng qua ng dng c nhit , m ca mi trng
v gi v server. y l mt ng dng kh n gin, hu ch v d lm. Thng qua phn ny chng ta
c th xy dng c mt ng dng IoT thc t, nm bt c cc kin thc c bn v thu thp d
liu, xy dng thit b v server.
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 69/155
Yu cu
Phn c bn: HTTP Server hin th d liu nhit , m ra mn hnh Log trn my tnh
Phn nng cao: HTTP Server lu tr d liu, v cung cp file HTML cho ngi dng c th xem
qua Browser
Phn tch
Chng ta cn 1 Web Server vit bng Javascript, thc thi bi Node.js, lng nghe Port c ch
nh trn my tnh c nhn. y l port 8000
Web Server tr v trng thi HTTP status = 200 (OK), cng vi vic hin th ra ca s log gi tr
nhit , m.
phn nng cao:Web Server lu tr d liu nhit , m trong mng, cha b nh RAM
Web Server cn cung cp 1 file index.html cha m Javascript c th yu cu ly d liu
nhit , m lu trong RAM, v hin th ln biu
Kin thc
Tuy nhin cng ng qu lo lng nu bn cha tng dng nhng th ny, chng ta s hiu n khi
c cc phn tip theo.
70/155
OneWire l chun giao tip ni tip c thit k bi hng Dallas. l h thng bus nhm kt
ni cc thit b vi nhau truyn hoc nhn d liu.Trong chun giao tip ny thng ch s
dng 1 chn ng thi l va l ngun cung cp va l chn truyn nhn d liu. Cng ging
nh cc chun giao tip khc, OneWire cng gm 3 giai on reqquest (hi) respond (p)
data reading (truyn nhn d liu).
Tm tt
1. Master (ESP8266) gi tn hiu START, DHT11 s chuyn t ch tit kim nng lng (low-
power mode) sang ch lm vic bnh thng (high-speed mode)
4. Khi mun kt thc, Master s gi tn hiu STOP, kt thc qu trnh truyn nhn d liu
Ngn ng HTML
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 71/155
Node.js v Javascript
Thc hin
Linh kin cn c
Cm bin DHT11
Dy ni male-female header
in tr 5K Ohm
u ni
Kt ni s mch in nh hnh bn di
Server Nodejs
V pha Web Server, chng ta cn m bo n c th phc v cho nhiu Client, vi path l:
/ v cn li th tr v file index.html
//---------------------------------------------------------------------------------------------
var fs = require('fs');
var url = require('url');
var http = require('http');
var querystring = require('querystring');
var db = []; //database
//---------------------------------------------------------------------------------------------
// function gi yu cu(response) t pha server hoc nhn yu cu (request) ca client gi ln
function requestHandler(request, response) {
// Gi s a ch nhn c http://192.168.1.7:8000/update?temp=30&humd=40
var uriData = url.parse(request.url);
var pathname = uriData.pathname; // /update?
var query = uriData.query; // temp=30.5&hum=80
var queryData = querystring.parse(query); // queryData.temp = 30.5, queryData.humd = 40
//-----------------------------------------------------------------------------------------
if (pathname == '/update') {
var newData = {
temp: queryData.temp,
humd: queryData.humd,
time: new Date()
};
db.push(newData);
console.log(newData);
response.end();
//-----------------------------------------------------------------------------------------
} else if (pathname == '/get') {
response.writeHead(200, {
'Content-Type': 'application/json'
});
response.end(JSON.stringify(db));
db = [];
//-----------------------------------------------------------------------------------------
} else {
fs.readFile('./index.html', function(error, content) {
response.writeHead(200, {
'Content-Type': 'text/html'
});
response.end(content);
});
}
//-----------------------------------------------------------------------------------------
}
var server = http.createServer(requestHandler);
server.listen(8000);
console.log('Server listening on port 8000');
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 73/155
url: Chia nh URL thnh nhng thnh phn d dng truy xut
Tr v ni dung ca file index.html khi khng xy ra 2 trng hp <2> v <3>. Dng fs c file
index.html v gn ni dung vo content thng qua lnh fs.readFile('./index.html', function(error,
content). Hm response.writeHead(200, {'Content-Type': 'text/html' }) nhm khai bo m HTTP
code, nh dng tr v l HTML c file
Bn c th truy cp n ng dn ca file server.js v thc thi on code trn vi dng lnh node
server.js, sau th truy vp vo localhost:8000 xem trang index.html. Hoc truy cp vo
localhost:8000/update?temp=20&humd=60 xem mn hnh Log in ra kt qu nhit v m.
phn c bn chng ta cha cn phi quan tm n file index.html v on code Javascript trong
. Cng nhng cha quan tm ti vic x l khi ng dn l /get hoc /\*, m ch quan tm duy
nht khi nhn c vi ng dn /update.
Khi hon thnh phn c bn chng ta s i n mt ng dng kh ph bin, ngi dng cn hin
th cc d liu thu thp mt cch trc quan thng qua trnh duyt Web. V vy chng ta s lm 1 file
index.html cha m ngun Javascript c th yu cu Server tr v d liu mi giy hin th ln 1
biu canvas.
<!DOCTYPE html>
<html>
74/155
<head>
<meta charset="UTF-8">
<title>DHT11</title>
<!-- Nhng file Javasript ti ng dn src c th xy dng 1 graph -->
<script type="text/javascript" src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
</head>
<body>
<h1> 1. THONG SO NHIET DO, DO AM</h><br>
<h2> Temprature</h2> <input type="text" size="6" id="temp">°C<br>
<h2> Humidity</h2> <input type="text" size="6" id="humd">%<br>
<h1> 2. DO THI</h1><br>
<!-- thit lp kch thc cho graph thng qua id ChartContainer thit lp trn -->
<div id="ChartContainer" style="height: 300px; width:80%;"></div>
<script type="text/javascript">
function httpGetAsync(theUrl, callback) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
callback(JSON.parse(xmlHttp.responseText));
}
xmlHttp.open("GET", theUrl, true); // true for asynchronous
xmlHttp.send(null);
}
window.onload = function() {
var dataTemp = [];
var dataHumd = [];
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 75/155
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 77/155
Code ESP8266
ESP8266 s dng th vin HTTPClient kt ni ti Web Server v ly d liu nhit , m thng
qua phng thc GET vi query l temp v humd.
Chun b
Cung cp SSID v PASSWORD WiFi cho board mch ESP8266 kt ni vo mng ni b vi Web
Server.
M ngun ESP8266
78/155
void setup() {
Serial.begin(115200);
dht.begin(); // Khi to DHT1 11 truyn nhn d liu
Serial.println("Connecting");
void loop() {
// temp, humi chuyn t nh dng float sang nh dng string v in ra mn hnh serial // terminal trn Arduino.
Serial.printf("Nhiet do %s - Do am %s\r\n", String(temp, 1).c_str(), String(humi, 1).c_str());
}
client.stop(); // Ngt kt ni n server
delay(sendingInternval);
}
ESP8266 s gi d liu ln server sau khi kt ni thnh cng n server thng qua lnh
client.print(). Ni dung gi :
HTTP/1.1 khai bo s dng giao thc HTTP version 1.1 c th to 1 HTTP request
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 79/155
Connection, Content-Length
C th xem thng cc thng tin ca qu trnh truyn nhn d liu vi lnh: curl -v
http://192.168.1.7:8000/update?temp=28.0&humd=45.0. Thng tin hin th nh bn di:
ng dng m rng
Xy dng 1 d n gim st v iu khin nhit , m hin th trn web vi giao din iu khin :
Hin th gi tr nhit , m.
C 2 ch Auto v Manual.
C ty chn hin th lch s nhit , m theo thi gian t ngy aa/bb/cccc n ngy
xx/yy/zzzz
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 81/155
Tng kt
Sau khi hon thnh d n, chng ta c ci nhn tng quan v trnh t cc bc xy dng mt
d n hon chnh trong vic thu thp d liu ca cm bin cng nh xy dng server qun l cc
my khch. T l bc m gip bn pht trin thm nhiu cc d n thu thp v x l d liu
trong tng lai.
82/155
Cc ch cu hnh WiFi
Thng thng, khi bt u kt ni wifi cho ESP8266, ta phi cu hnh cho thit b cc thng s ca
Access Point cng nh SSID v password nu mng wifi c thit lp cc bo mt nh
WEP/WPA/WPA2. Tuy nhin, cc ng dng nhng s dng Wi-fi thng t ch trng n giao din
ngi dng (user interface), khng c bn phm hay touchscreen,.. giao tip. V th, mi khi mun
kt ni thit b ESP vi mt Access Point no , bn cn phi c mt my tnh ci t sn phn
mm bin dch, tip theo l vit code cu hnh li thng s wifi cho thit b, sau np code cho thit
b thng qua mt cable USB.
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 83/155
Smartconfig
Kin thc
Chng ta nn bit rng, khi 1 in thoi thng minh kt ni vo mng WiFi c mt khu, th ton b
d liu trao i gia in thoi v u mi khc trong mng s c m ha. Ngha l cc thit b
cha c kt ni mng v khng c mt khu th khng th gii m c d liu. Vy lm th no
ng dng trn in thoi gi thng tin kt ni ny n 1 thit b khc cha h kt ni mng. lm
c iu ny, th nh vo 2 c im sau:
ESP8266 c kh nng lng nghe tt c cc gi tin khng dy WiFi xung quanh n, bao gm c
cc gi tin c m ha.
Cch thc giao thc ESPTOUCH thc hin vic gi thng tin SSID v mt khu cho thit b nh
sau:
Lu :
Khong cch gia thit b v router cng xa th thi gian kt ni s cng lu.
Ngi dng c th cu hnh cho nhiu thit b kt ni chung vo mt router cng lc.
Trong v d di y, chng ta s tin hnh kt ni wifi cho board ESP8266 bng SmartConfig. S
dng ng dng ESP8266 SmartConfig (Android). Bn c th d dng tm thy ng dng ny cng nh
cc ng dng tng t trn Play Store (Android) hay iTunes (iOS) thc hin vic kt ni bng
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 85/155
SmartConfig ny.
Trc tin, ta s np chng trnh cho ESP8266. im mu cht trong chng trnh ny chnh l hm
WiFi.beginSmartConfig() c cung cp trong th vin ESP8266WiFi. Hm ny cho php thit b khi
ng ch SmartConfig, thu thp cc thng tin t cc gi tin v gii m chng c th kt ni vo
mng Wifi.
Sau khi np xong chng trnh, ta nhn gi button (GPIO0) trong 3s thit b i vo ch
smartconfig. (Lc ny bn s thy led trn board nhp nhy nhanh hn). Dng smart phone ca bn
truy cp vo wifi mun kt ni, sau m ng dng smartconfig v nhp cc thng tin SSID v
PASSWORD (nu c) ca wifi. Nhn CONFIRM xc nhn.
Code
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <Ticker.h>
#include <time.h>
#define PIN_LED 16
#define PIN_BUTTON 0
Ticker ticker;
void tick()
{
int state = digitalRead(PIN_LED); // Ly trng thi hin ti ca LED (GPIO16)
digitalWrite(PIN_LED, !state); // o trng thi LED.
}
bool in_smartconfig = false; // Bin trng thi kim tra thit b c ang trong ch smartconfig hay khng.
/* Vo ch Smartconfig*/
void enter_smartconfig()
{
if (in_smartconfig == false) { // Kim tra tra bin trng thi, nu khng ch smartconfig th
in_smartconfig = true; // Gn bin trng thi bng "true", ngha l ang trong smartconfig
ticker.attach(0.1, tick); // Nhp nhy led chu k 0.1s.
86/155
/* Thot ch smartconfig*/
void exit_smart()
{
ticker.detach(); // Ngng nhy led
LED_ON(); // Bt LED
in_smartconfig = false; // Gn bin trng thi tr v ban u.
Serial.println("Connected, Exit smartconfig"); // In thng bo ra mn hnh.
}
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 87/155
WPS
WPS l g?
Nu tng cu hnh cho mt router wifi, s gp qua cc thut ng WPS trong cc menu cu hnh
ca router. Hoc tng nhn thy mt nt nhn trn cc router vi ch vit bn cnh WPS. Vy WPS l
g ? Qu trnh thc hin kt ni nh th no ? Cng nh thc hin WPS vi ESP8266, l nhng nhng
ni dung s c ni n phn ny.
WPS l t vit tc ca Wifi Protected Setup, mt phng thc gip vic kt ni vi mng khng dy
gia router v thit b kt ni khng dy mt cch nhanh chng v d dng, thay v lm mt cch th
cng: tm mng wifi cn kt ni v nhp mt khu vo mng wifi. WPS ch hot ng khi c hai thit
b l router v thit b cn kt ni n router c h tr chun bo mt c nhn WPA/WPA2.
Tip theo l nhn nt nhn thit b WPS. Nt nhn ny gip thit b WPS kt ni n router,
vic kt ni ny c th tht bi nu qu thi gian. Thi gian ny c nh sn xut cc thit b
h tr ch ny quy inh, khong t 1 pht n 5 pht.
Code
#include <ESP8266WiFi.h>
void setup()
{
// Ci t cc thng s ban u
Serial.begin(115200);
WiFi.mode(WIFI_STA);
// Kt ni vi AP c vo trc , SSID v password c lu trong b nh flash ca thit b
WiFi.begin("", "");
delay(4000);
void loop()
{
// chng trnh chnh
}
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 89/155
Wifi Manager
WifiManager l mt th vin cu hnh ESP8266 kt ni vo mng WiFi cc b s dng giao din Web.
Bng cch khi ng 1 mng WiFi ring vi Captive Portal, ESP8266 s cho php cc thit b khc nh
my tnh, in thoi thng minh kt ni vo, ng thi chuyn hng mi kt ni n giao din Web
do ESP8266 to nn. Trn giao din ny, s cung cp cc trng ngi dng c th d dng qut
mng xung quanh, chn mng WiFi, nhp mt khu, lu cu hnh.
Hot ng c bn WifiManager
Nu nh kt ni khng thnh cng (c th l Access Point ln trc khng cn na, hay sai mt
khu, hoc cha c thng tin ca bt c Access Point no trong ESP8266 ), lc ny ESP8266 s
vo ch AP vi mt DNS tr v chnh n (c th thit lp DNS tr v a ch khc) v khi ng
Web Server (vi a ch mc nh l 192.168.4.1)
S dng cc thit b c h tr wifi, v c trnh duyt web (in thoi thng minh, laptop, my
tnh bng) kt ni n AP ca ESP8266 va mi to ra. C th thy mt giao din (vi tn AP
ca ESP8266 l mc nh v khng ci t mt khu cho ESP8266 AP) tng t nh sau :
90/155
Sau khi vo c giao din option ca ESP8266 AP a ch 192.168.4.1, chn mc cu hnh cho
wifi cho ESP8266 (nh v d trn l Configure WiFi hoc Configure WiFi (No Scan)), c th s thy
giao din tip theo tng t nh sau :
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 91/155
Chun b
Code
92/155
// Ci t thng s ban u
void setup()
{
Serial.begin(115200);
void loop()
{
// Chng trnh chnh
}
M rng
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 93/155
Tng kt
trin khai mt ng dng IoT thc t th i hi rt nhiu vn , mt trong s nhng iu quan
trng l d dng, d cu hnh cho ngi s dng v phi bo mt trong qu trnh cung cp thng tin
cho thit b. Ty thuc vo nhu cu pht trin sn phm v tnh nng ca sn phm m bn c th
la chn cho mnh phng php cu hnh ph hp. V d, nu thit b c nt nhn v c phn mm
trn in thoi, th SmartConfig v WPS l mt s la chn. Nu l 1 bng n trng trn khng c g
c, th WiFiManager li hu hiu.
94/155
MQTT
MQTT (Message Queuing Telemetry Transport) l mt giao thc gi dng publish/subscribe s dng
cho cc thit b Internet of Things vi bng thng thp, tin cy cao v kh nng c s dng
trong mng li khng n nh.
Bi v giao thc ny s dng bng thng thp trong mi trng c tr cao nn n l mt giao thc
l tng cho cc ng dng M2M.
V MQTT l g? c mt ci nhn ton din hoc nh ngha chi tit, ch cn google "what is mqtt",
"mqtt slides" y chng ta ch ni ngn gn thi, hiu giao thc MQTT, bao gm cc nh
ngha "subscribe", "publish", "qos", "retain", "last will and testament (lwt)"
Publish, subscribe
Trong mt h thng s dng giao thc MQTT, nhiu node trm (gi l mqtt client - gi tt l client)
kt ni ti mt MQTT Server (gi l Broker). Mi client s ng k mt vi knh (topic), v d nh
"/client1/channel1", "/client1/channel2". Qu trnh ng k ny gi l "subscribe", ging nh chng ta
ng k nhn tin trn mt knh Youtube vy. Mi Client s nhn c d liu khi bt k trm no
khc gi d liu vo knh ng k. Khi mt Client gi d liu ti knh , gi l "publish".
QoS
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 95/155
Retain
Nu RETAIN c set bng 1, khi gi tin c publish t Client, Broker PHI lu tr li gi tin vi QoS,
v n s c gi n bt k Client no subscribe cng knh trong tng lai. Khi mt Client kt ni
ti Broker v subscribe, n s nhn c gi tin cui cng c RETAIN = 1 vi bt k topic no m n
ng k trng. Tuy nhin, nu Broker nhn c gi tin m c QoS = 0 v RETAIN = 1, n s hu tt c
cc gi tin c RETAIN = 1 trc . V phi lu gi tin ny li, nhng hon ton c th hu bt k lc
no.
LWT
Gi tin LWT (last will and testament) khng thc s bit c Client c trc tuyn hay khng, ci ny
do gi tin KeepAlive m nhn. Tuy nhin gi tin LWT nh l thng tin iu g s xy n sau khi thit
b ngoi tuyn.
Mt v d
Ngn gn
MQTT Client
Nh chng ta tm hiu phn trc, 2 thnh phn publisher v subscriber l c trng to nn
giao thc MQTT. Cc MQTT Client khng kt ni trc tip vi nhau, mi gi d liu c gi i u
thng qua MQTT Broker. c th trin khai cc ng dng ca MQTT Client, chng ta cn MQTT
Broker (s c trnh by trong phn sau). phn ny chng ta s lm quen vi giao thc MQTT
bng cc v d s dng MQTT Client thng dng v cc dch v MQTT Broker min ph v ph bin, 2
trong s chng l test.mostquitto.org v cloudmqtt.com
MQTT Lens
Thng tin
MQTT Lens l mt tin ch m rng ca Chrome (Chrome Extension), n s dng trnh duyt Chrome
kt ni n MQTT Broker cng nh test cc tnh nng publish/subcribe ca giao thc MQTT. y
l mt cng c rt hu ch kim tra kt ni n MQTT Broker v kim tra vic gi v nhn gi tin.
Kt ni
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 97/155
Gii thch
M rng
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 99/155
MQTT.js
MQTT.js l mt th vin MQTT client, c vit bng ngn ng JavaScript trn nn tng Node.js v h
tr MQTT Over Websocket (MOW).
Ci t
Trc tin ta cn kim tra h iu hnh h tr Node.js trc khi ci t MQTT.js. Nu cha th c
th tham kho cch ci t ti nodejs.org/en/
npm init
Khi chy lnh ny, bn cng cn phi khai bo thm mt s thng tin cho d n nh tn, phin bn,
keywords, tc gi, Sau khi to xong, trong th mc va to s xut hin mt file l package.json vi
ni dung l cc phn khai bo. File ny cng cha thuc tnh dng lu tr cc package chng
ta ci t.
Sau khi ci t xong, bn c th s dng module mqtt thc hin vic kt ni MQTT Client vi
Broker, publish message hay subscribe topic. Tt nhin, ton b cc file lin quan n th vin s
nm trong th mc node_modules, trong th mc d n.
M ngun ca client A
client-a.js
M ngun ca client B
client-b.js
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 101/155
Ngoi ra, MQTT.js cn cung cp thm cc lnh c th tng tc vi Broker thng qua terminal.
lm c iu ny, chng ta ci t MQTT.js nh mt module ton cc bng cch s dng lnh:
terminal th 2 (tm gi l publisher) thc hin publish mt tin nhn vi ni dung "hello subscriber"
ti "topicA":
Cc options:
-h : Xc nh my ch s kt ni n.
-v : verbose, option cho php ghi li nht k hot ng ca cc tp tin trong file cu hnh.
102/155
xem thm cc API khc trong MQTT.js, bn c th s dng lnh: mqtt help
[command].
PubSubClient
Trong phn ny chng ta s thc hin kt ni board ESP8266 WiFi Uno n 1 broker s dng th vin
PubSubClient.
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
pinMode(16, OUTPUT);
Serial.begin(115200);
// hm thc hin chc nng kt ni Wifi v in ra a ch IP ca ESP8266
setup_wifi();
// ci t server l broker.mqtt-dashboard.com v lng nghe client port 1883
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 103/155
client.setServer(mqtt_server, 1883);
// gi hm callback thc hin cc chc nng publish/subcribe
client.setCallback(callback);
// gi hm reconnect() thc hin kt ni li vi server khi b mt kt ni
reconnect();
}
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
// kt ni n mng Wifi
WiFi.begin(ssid, password);
// in ra du . nu cha kt ni c n mng Wifi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// in ra thng bo kt ni v a ch IP ca ESP8266
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
// lp cho n khi c kt ni tr li
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ESP8266")) {
Serial.println("connected");
// publish gi tin "Connected!" n topic ESP8266/connection/board
client.publish("ESP8266/connection/board", "Connected!");
// ng k nhn gi tin ti topic ESP8266/LED_GPIO16/status
client.subscribe("ESP8266/LED_GPIO16/status");
} else {
// in ra mn hnh trng thi ca client khi khng kt ni c vi MQTT broker
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// delay 5s trc khi th li
delay(5000);
}
}
}
void loop() {
// kim tra nu ESP8266 cha kt ni c th s thc hin kt ni li
if (!client.connected()) {
104/155
reconnect();
}
client.loop();
}
Bc 3 : M MQTT lens trn trnh duyt Chrome, to 1 connection vi host name broker.mqtt-
dashboard.com, s dng port 1883. Thc hin subscribe topic ESP8266/connection/board. Sau
khi nhn nt subscribe trn MQTT lens s xut hin 1 message gi t esp8288 vi ni dung
connnected. Thc hin pushlish cc message vo topic ESP8266/LED_GPIO16/status. Nu
pushlish message vi ni dung on, led GPIO16 trn board s sng, pushlish message off led
GPIO16 trn board s tt. Cc message vi ni dung khc th vn s hin th d liu nhn c
trn serial terminal ca Arduino nhng s khng c tc dng iu khin led GPIO16. Kt qu
hin th nh hnh bn di:
Hnh 54. Kt qu hin th trn serial terminal v MQTT lens khi s dng th vin pubsubClient
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 105/155
ESP8266MQTTClient
Tip theo, chng ta s tm hiu cch s dng th vin ESP8266MQTTClient, th vin c cng ng
developer nh gi l n nh d s dng hn so vi th vin PubSubClient thng qua 1 ng dng
iu khin led trn board ESP8266 WiFi Uno bng 1 ng dng trn in thoi smartphone.
#include <ESP8266MQTTClient.h>
#include <ESP8266WiFi.h>
MQTTClient mqtt;
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
// Nu chui nhn c l 'on' s ON led trn board ESP8266 WiFi Uno, chui 'off' s OFF led
if (topic == "esp8266/GPIO16" && data[0] == 'o' && data[1] == 'n' && data[2] == '\0') {
digitalWrite(ledPin, LOW);
Serial.println("Turn on the led on board");
} else if (topic == "esp8266/GPIO16" && data[0] == 'o' && data[1] == 'f' && data[2] == 'f' && data[3] == '\0' ) {
digitalWrite(ledPin, HIGH);
Serial.println("Turn off the led on board");
}
});
// khi to broker MQTT l iot.eclipse.org s dng phng thc websocket v lng nghe client port 80
mqtt.begin("ws://iot.eclipse.org:80/ws");
}
void loop() {
// Hm khi to MQTT, kim tra v x l cc d liu t cc topic, kim tra cc thuc tnh ca giao
// thc nh gi keep-a-live, gi tin QoS, id ca topic...,
mqtt.handle();
}
Tng t nh m ngun ca chng trnh s dng th vin pubsubCLient, chng ta cng s khi to
ESP8266 l MQTT Client trong class MQTT ca th vin ESP8266MQTTClient. Ci t ESP8266 ch
Station v kt ni n network wifi. Chc nng ca cc hm trong th vin c gii thch file
m ngun, hm mqtt.onConnect() chng ta s subscribe topic l esp8266/GPIO16. Hm
mqtt.onSubscribe() s thc hin puslish cc message topic ch nh l Broker/app. Hm
mqtt.onData() s nhn, kim tra v x l d liu nhn c t topic subscribe. y ta s dng 1
public MQTT Broker l iot.eclipse.org, s dng phng thc Websocket l lng nghe cc MQTT Client
port 80, y l port mc nh khi s dng Websocket. Vic gi nhn d liu bng phng thc
Websocket s gip gim bng thng v tr khi truyn nhn d liu thng qua giao thc MQTT. Chi
tit v Websocket chng ta s c hc cc bi hc sau. loop() chng ta ch cn gi hm
handle() khi to v kim tra cc thuc tnh ca giao thc cng nh x l, truyn v nhn d liu t
cc topic subscribe v public.
Truy cp vo App Store trn h iu hnh iOS hoc CH Play trn h iu hnh Android. nhp t kha
IoT Smartconfig v ci t ng dng IoT Smartconfig ca developer Tuan PM. Hnh nh ng dng
hin th nh bn di:
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 107/155
Hnh 55. Hnh nh ng dng IoT Smartconfig trn h iu hnh iOS v Android
ng dng ny s dng vi ESP8266 v ESP32, ngoi chc nng c bn l publish, subscribe ca giao
thc MQTT, ng dng cn c chc nng smartconfig ESP8266 v ESP32 c th d dng thit lp
kt ni vi cc network wifi khc nhau mt cch thun tin v nhanh chng m khng phi np li m
ngun.
Tip theo, trt ng dng qua phn MQTT, nhn vo nt connect kt ni n server MQTT Broker
ws://iot.eclipse.org:80/ws. Thc hin subscribe topic Broker/app v publish message vo topic
esp8266/GPIO16. Nu publish message on vo esp8266/GPIO16 th led trn board ESP8266 WiFi Uno
s sng, gi off s tt led, ng thi khi ESP8266 publish cc message topic Broker/app th ni
dung cc message s c hin th trn ng dng. Kt qu hin th nh hnh bn di:
108/155
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 109/155
MQTT Broker
phn trc chng ta s dng cc dch v MQTT Broker min ph th nghim, tuy nhin ta c th
s phi tr ph dch v vi nhng ng dng ln cn bng thng rng v tc p ng nhanh, cng
vi vic d liu c th b tn cng do bo mt thng tin cha cao. Do , phn ny, chng ta s
t mnh xy dng 1 MQTT Broker. Vic t thit lp 1 MQTT broker gip chng ta c th s dng giao
thc MQTT trn my local m khng cn kt ni n cc dch v MQTT Broker mng internet. Qu
trnh truyn, nhn v x l d liu din ra 1 cch nhanh chng cng nh bo mt thng tin ca ngi
dng. Tuy nhin, to c 1 MQTT Broker vi y tnh nng ca giao thc MQTT i hi chng
ta phi c kin thc tt v giao thc MQTT cng nh cc ngn ng lp trnh b tr cho vic xy dng
n. bt u, ta s to ra 1 MQTT Broker n gin bng cch dng 1 module h tr sn c l
Mosca.
MOSCA
Mosca l 1 trong s rt nhiu server MQTT Broker ca giao thc MQTT. C th k n cc server khc
nh HiveMQ, Apache Apollo, Mosquitto, Mongoose. Mosca c 1 s c im nh sau:
Mc tiu
Chng ta s to 1 MQTT Client l ESP8266 v 1 MQTT Client trn my tnh s dng MQTT.js nhm
kt ni n MQTT Broker , subscribe topic v publish cc message.
Dng Mosca to 1 MQTT Broker trn my tnh c nhn nhm broadcast messages (truyn b
cc gi tin) n cc MQTT Client.
Cc bc thc hin
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 111/155
var mosca = require('mosca'); // Khai bo bin mosca s dng cc thuc tnh ca module mosca
// S dng th vin ascoltatore nhm h tr publish message, subscribe topic n t cc Broker/Protocol
var ascoltatore = {
type: 'mongo',
url: 'mongodb://localhost:27017/mqtt', // url: a ch url ca mongodb, server s lng nghe cc client a
// ch localhost:27017
pubsubCollection: 'ascoltatori', // pubsubCollection: Ni lu tr cc message ca mongodb
mongo: {} // mongo: Ci t dnh cho kt ni ca mongo. Khng s dng
};
var settings = {
port: 1883, // port kt ni n server
backend: ascoltatore // ascoltatore s c gi v thc thi khi to server c to thit lp cc kt ni
};
// In ra dng ch client connected v id ca client khi c s kin client kt ni thnh cng n server
server.on('clientConnected', function(client) {
console.log('client connected', client.id);
});
})
// Khi c message gi n client, client s chuyn i d liu t Buffer sang dng String v in ra mn
// hnh console d liu nhn c v ng kt ni.
client.on('message', function (topic, message) {
// message is Buffer
console.log(message.toString());
//client.end();
})
Kt qu
Trn terminal, i n th mc cha file moscaServer.js v khi chy server bng lnh node
moscaServer.js. Server s khi ng v lng nghe cc kt ni n t cc MQTT Client. Tip theo, np
chng trnh trn Arduino cho ESP8266, sau khi chy MQTT Client trn my tnh bng lnh node
moscaClient.js. Khi c cc s kin kt ni , ngt kt ni, pushlish 1 message hay subcrible 1 topic n
t cc client th bn pha server u s hin th ni dung v thng tin. Cc terminal hin th kt qu
nh hnh bn di:
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 113/155
Hnh 60. Hnh nh thng tin nhn c client mqtt.js v client ESP8266
Mosquitto
EMQ
EMQ (Erlang MQTT Broker) l mt MQTT Broker c vit bng ngn ng lp trnh Erlang. u im ca
EMQ l tnh n nh cao, thch hp thit k cc h thng ln do kh nng m rng ng dng d
dng cng nh kh d ci t. Ngoi ra EMQ cn h tr nhiu phng thc xc thc ngi dng,
pht trin v cp nht tnh nng lin tc bi cng ng developer. Tuy nhin im yu ca MQTT
broker ny l kh i vi nhng ngi mi bt u. Thng tin v EMQ c th xem ti trang emqttd-
docs.readthedocs.io/en/latest/#
114/155
Tng kt
T nhng ni dung trnh by trn, chng ta phn no hiu r v cch thc hot ng ca giao
thc MQTT cng nh vai tr ca n trong cc ng dng IoT. Nhng ni dung c trnh by phn
ny ch l phn c bn ca giao thc, v y l giao thc quan trng v thng s dng trong IoT nn
chng ta hy dnh nhiu thi gian hn nghin cu thm v hot ng ca cc gi QoS, Keep
alive, cng nh cc vn chng thc ti khon, vn bo mt d liu khi s dng MQTT.
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 115/155
Websocket
WebSoket l cng ngh h tr giao tip hai chiu gia client v server bng cch s dng mt TCP
socket to mt kt ni lin tc, hiu qu v t tn km. Mc d c thit k chuyn s dng
cho cc ng dng web, lp trnh vin vn c th a chng vo bt k loi ng dng no.
WebSockets mi xut hin trong HTML5, cho php cc knh giao tip song song hai chiu v hin
c h tr trong nhiu trnh duyt. Kt ni c m thng qua mt HTTP request (yu cu HTTP), vi
nhng header c bit thng bo cho Server (c h tr) chuyn sang kt ni Websocket. Kt ni ny
c duy tr bn c th gi v nhn d liu mt cch lin tc, khng t qung, v khng cn bt
k HTTP header (overhead) no na.
Websocket h tr cho cc trnh duyt ph bin hin nay nh: Google Chrome, Microsoft Edge,
Internet Explorer, Firefox, Safari v Opera.
u im
WebSockets cung cp kh nng giao tip hai chiu vi kt ni c duy tr, c tr thp, gip
Server d dng giao tip vi Client. Do , websocket s ph hp cho cc ng dng real-time, ngi
dng s khng mt thi gian phi reload li trnh duyt cp nht thng tin mi nht nh khi s
dng giao thc HTTP.
Nhc im
Giao thc Websocket cha c tt c cc trnh duyt c hin nay h tr. Websocket cng i
hi cc ng dng web trn server h tr n.
116/155
Yu cu
Khi nhn nt trn board ESP8266 s gi ni dung trng thi nt nht n Web Browser hin th
dng hp kim (checkbox), nhn nt l c kim, khng nhn nt l khng c kim.
ng thi khi nhn hp kim trn trnh duyt s thay i trng thi n LED trn board
ESP8266.
Chun b
github.com/me-no-dev/ESPAsyncWebServer
github.com/me-no-dev/ESPAsyncTCP
Th vin ESPAsyncWebServer dng cho vic thit lp HTTP server v websocket server cho module
ESP8266, v x l cc s kin trn server-client.
cc chng trnh dng th vin ESPAsyncWebserver hoat ng, ta cn dng thm th vin
ESPAsyncTCP.
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 117/155
ws.onmessage = function(evt)
{
// s kin xy ra khi client nhn d liu t server
};
ws.onclose = function() {
// s kin khi websocket b ng
};
<!DOCTYPE HTML>
<html>
<head>
<title>ESP8266 WebSocket</title>
</head>
<body>
<div> Webscoket status <span id="status" style="font-weight: bold;"> disconnected </span> </div>
<div> ESP8266 Button Status <input type="checkbox" id="btn" name="btn" /> </div>
<div> Control LED <input type="checkbox" id="led" name="led" disabled="true" /> </div>
<script type="text/javascript">
var button = document.getElementById('btn');
var led = document.getElementById('led');
var url = window.location.host; // hm tr v url ca trang hin ti km theo port
var ws = new WebSocket('ws://' + url + '/ws'); // m 1 websocket vi port 8000
ws.onopen = function() //khi websocket c m th hm ny s c thc hin
{
document.getElementById('status').innerHTML = 'Connected';
led.disabled = false; //khi websocket c m, mi cho php
};
</script>
</body>
</html>
#include <ESP8266WiFi.h>
#include <ESPAsyncWebServer.h>
// a on code HTML vo chng trnh Arduino, cn chuyn i code HTML sang dng char
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 119/155
"</head>"
"<body>"
" <div> Webscoket status <span id=\"status\" style=\"font-weight: bold;\"> disconnected </span> </div>"
" <div> ESP8266 Button Status <input type=\"checkbox\" id=\"btn\" name=\"btn\" /> </div>"
" <div> Control LED <input type=\"checkbox\" id=\"led\" name=\"led\" disabled=\"true\" /> </div>"
" <script type=\"text/javascript\">"
" var button = document.getElementById('btn');"
" var led = document.getElementById('led');"
" var status = document.getElementById('status');"
" var url = window.location.host;"
" var ws = new WebSocket('ws://' + url + '/ws');"
" ws.onopen = function()"
" {"
" status.text = 'Connected';"
" led.disabled = false;"
" };"
" ws.onmessage = function(evt)"
" {"
" if(evt.data == 'BTN_PRESSED') {"
" button.checked = true;"
" } else if(evt.data == 'BTN_RELEASE') {"
" button.checked = false;"
" }"
" };"
" ws.onclose = function() {"
" led.disabled = true;"
" status.text = 'Disconnected';"
" };"
" led.onchange = function() {"
" var status = 'LED_OFF';"
" if (led.checked) {"
" status = 'LED_ON';"
" }"
" ws.send(status)"
" }"
" </script>"
"</body>"
"</html>";
AsyncWebServer server(8000);
AsyncWebSocket ws("/ws");
}
void setup()
{
pinMode(LED, OUTPUT);
pinMode(BTN, INPUT);
Serial.begin(115200);
Serial.setDebugOutput(true);
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.printf("STA: Failed!\n");
120/155
WiFi.disconnect(false);
delay(1000);
WiFi.begin(ssid, password);
}
ws.onEvent(onWsEvent); // gi hm onWsEvent
server.addHandler(&ws);
server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
request->send_P(200, "text/html", index_html); // tr v file index.html trn giao din browser khi browser truy cp
vo IP ca server
});
server.begin(); // khi ng server
void loop()
{
static bool isPressed = false;
if (!isPressed && digitalRead(BTN) == 0) { //Nhn nt nhn GPIO0
isPressed = true;
ws.textAll("BTN_PRESSED");
} else if (isPressed && digitalRead(BTN)) { //Nh nt nhn GPIO0
isPressed = false;
ws.textAll("BTN_RELEASE");
}
}
Kt qu
Sau khi bin dch xong code trn Arduino, ta vo browser, truy cp vo a ch IP ca ESP8266 tr
v trn Serial Monitor cng vi port thit lp trn server, trng hp ny l 192.168.1.65:8000
Hnh 61. Ca s trnh duyt c th iu khin ESP8266 thng qua Web Socket
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 121/155
Video kt qu
Mt s dch v s dng Websocket in hnh nh dch v tin nhn Slack, dch v c s d liu thi
gian thc Firebase
Hnh 62. Hai ca s trnh duyt s hin th trng thi nt kim ging nhau khi click thay i
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 123/155
index.html
<!DOCTYPE HTML>
<html>
<head>
<title>ESP8266 WebSocket</title>
</head>
<body>
<div> Webscoket status <span id="status" style="font-weight: bold;"> disconnected </span> </div>
<div> ESP8266 Button Status <input type="checkbox" id="btn" name="btn" /> </div>
<div> Control LED <input type="checkbox" id="led" name="led" disabled="true" /> </div>
<script type="text/javascript">
var button = document.getElementById('btn');
var led = document.getElementById('led');
var url = window.location.host; // hm tr v url ca trang hin ti km theo port
var ws = new WebSocket('ws://' + url + '/ws'); // m 1 websocket vi port 8000
console.log('connecting...')
ws.onopen = function() //khi websocket c m th hm ny s c thc hin
{
document.getElementById('status').innerHTML = 'Connected';
led.disabled = false; //khi websocket c m, mi cho php
console.log('connected...')
};
</script>
</body>
</html>
npm install ws
124/155
server.js
var fs = require('fs');
var url = require('url');
var http = require('http');
var WebSocket = require('ws');
socket.on('message', function(message) {
console.log('received: %s', message);
broadcast(socket, message);
});
socket.on('close', function() {
var index = clients.indexOf(socket);
clients.splice(index, 1);
console.log('disconnected');
});
});
server.listen(8000);
console.log('Server listening on port 8000');
github.com/Links2004/arduinoWebSockets
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 125/155
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <WebSocketsClient.h> //https://github.com/Links2004/arduinoWebSockets
WebSocketsClient webSocket;
void setup() {
pinMode(LED, OUTPUT);
pinMode(BTN, INPUT);
Serial.begin(115200);
Serial.println("ESP8266 Websocket Client");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
webSocket.begin("192.168.0.106", 8000);
webSocket.onEvent(webSocketEvent);
void loop() {
webSocket.loop();
static bool isPressed = false;
if (!isPressed && digitalRead(BTN) == 0) { //Nhn nt nhn GPIO0
isPressed = true;
webSocket.sendTXT("BTN_PRESSED");
} else if (isPressed && digitalRead(BTN)) { //Nh nt nhn GPIO0
isPressed = false;
webSocket.sendTXT("BTN_RELEASE");
}
}
126/155
Hnh 63. Click nt kim s thay i trng thi LED trn board
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 127/155
Tng kt
Vic s dng giao thc websocket s c nhiu li ch cho cc kt ni 2 chiu, lun c duy tr v c
tr thp.
128/155
i vi cc sn phm phn cng cng tng t, chng ta nn b sung cc tnh nng cp nht t xa
ngay t giai on pht trin sn phm. Ngoi vic gip nng cp cc tnh nng trong tng lai mt
cch d dng, th vn sa li, nng cp h thng t xa s gip tit kim c rt nhiu chi ph v
ngun lc.
Trong phn ny, chng ta s tm hiu cc phng php cp nht t xa cho ESP8266, lm sao np
Firmware khng dy cho module, lm sao ESP8266 c th t ti Firmware v, lm sao ESP8266
c th t khi ng 1 HTTP Server c giao din Web upload firmware ln chip.
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 129/155
Cp nht firmware t xa
Cp nht firmware OTA (Over the Air) l tin trnh ti firmware mi vo ESP8266 module thay v s
dng cng Serial. Tnh nng ny thc s rt hu dng trong nhiu trng hp gii hn v kt ni vt
l n ESP Module.
Arduino IDE
Web Browser
HTTP Server
S dng OTA vi ty chn dng Arduino IDE trong qu trnh pht trin, th nghim, 2 ty chn cn li
ph hp cho vic trin khai ng dng thc t, cung cp tnh nng cp nht OTA thng qua web hay
s dng HTTP Server.
Trong tt c cc trng hp, th Firmware h tr OTA phi c np ln u tin qua cng Serial, nu
mi th hot ng trn tru, logic ng dng OTA hot ng ng th c th thc hin vic cp nht
firmware thng qua OTA.
Bo mt
Khi ESP8266 c php thc thi OTA, c ngha n c kt ni mng khng dy v c kh nng c
cp nhp Sketch mi. Cho nn kh nng ESP8266 b tn cng s nhiu hn v b np bi m thc thi
khc l rt cao. gim kh nng b tn cng cn xem xt bo v cp nht ca bn vi mt mt
khu, cng s dng c nh khc bit, v.v
Kim tra nhng tnh nng c cung cp bi th vin ArduinoOTA thng xuyn, c th c nng
cp kh nng bo v an ton:
An ton
Qu trnh OTA tiu tn ngun ti nguyn v bng thng ca ESP8266 khi ti ln. Sau , ESP8266
c khi ng li v mt Sketch mi c thc thi. Cn phn tch v kim tra nh hng ca qu
trnh ny ti cc chc nng c v sketch mi ca ESP module.
void onStart(OTA_CALLBACK(fn));
void onEnd(OTA_CALLBACK(fn));
void onProgress(OTA_CALLBACK_PROGRESS(fn));
void onError(OTA_CALLBACK_ERROR (fn));
Yu cu cn bn
B nh Flash phi c dung lng lu c sketch c (ang vn hnh trn h thng) v sketch
mi (cp nht OTA).
Hm ESP.getFreeSketchSpace(); c dng kim tra dung lng trng cho sketch mi.
Sketch mi s c copy.
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 131/155
132/155
S dng np firmware cho module ESP8266 thng qua WiFi m khng dng cng Serial
Trc khi bt u, cn phi chc chn Arduino IDE c ci t phin bn mi nht, bao gm gi
ESP8266 cho Arudino, v Python 2.7
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 133/155
Upload sketch Ctrl+U Khi hon thnh, m Serial Monitor Ctrl+Shift+M (xem S dng Arduino IDE Serial
Monitor) v kim tra module trup cp c WIFI cha
Hnh 65. Kim tra module ESP8266 truy cp c mng WiFi ni b cha
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
void setup() {
Serial.begin(115200);
Serial.println("Booting");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("Connection Failed! Rebooting...");
delay(5000);
ESP.restart();
}
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH)
type = "sketch";
else // U_SPIFFS
type = "filesystem";
// NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
Serial.println("Start updating " + type);
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
else if (error == OTA_END_ERROR) Serial.println("End Failed");
});
ArduinoOTA.setPassword((const char *)"ota-pass");
ArduinoOTA.begin();
Serial.println("Ready");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
ArduinoOTA.handle();
}
Khi module kt ni ti mng WiFi thnh cng, sau vi giy, cng esp8266-ota s xut hin trn
Arduino IDE. Lc ny bn hon ton c th b kt ni Serial t board mch n my tnh. Arduino IDE
c th np firmware mi thng qua WiFi. Chn port vi a ch IP hin trn ca s Serial Monitor
bc trc.
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 135/155
Nu cng OTA khng hin ln, bn cn thot Arduino IDE, v m li. Kim tra li
port OTA. Nu vn tip tc khng hin th cng OTA, kim tra tng la ca my
v cc ci t trn router.
Sau khi chn ng cng np OTA, bn hon ton c th sa li firmware mi v np thng qua
WiFi, tuy nhin cn lu nh sau:
S dng mt khu
Sau upload li sketch mt ln na (dng OTA). Sau khi bin dch v upload xong, ca s s hin
ln yu cu nhp password:
Cc ln np sau Arduino IDE s nh mt khu v khng hi li, tr khi bn thay i mt khu OTA, v
cc bc xc thc khng thnh cng, Arduino IDE s hi li bn.
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 137/155
cng. Vic ny c th c thc hin bng cch cho php Show verbose ouput during: upload trong
File > Preferences v upload ln module.
Nhng s c thng gp
Nu vic cp nht OTA tht bi, bc u tin bn cn lm l kim tra phn bo li hin trn ca s
Log ca Arduino IDE. Nu vic ny khng gip c bn, hy upload li khi kim tra cc thng tin ca
ESP hin trn serial port.
Khng dung lng b nh trn chip (v d nh ESP01 vi 512KB b nh flash khng cho
OTA).
Khu vc d liu cho SPIFFS qu nhiu, khng cn cha firmware, trong trng hp bn c
4MB Flash th trng hp ny khng xy ra.
Thc hin
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPUpdateServer.h>
ESP8266WebServer httpServer(80);
ESP8266HTTPUpdateServer httpUpdater;
void setup(void){
Serial.begin(115200);
Serial.println();
Serial.println("Booting Sketch...");
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
while(WiFi.waitForConnectResult() != WL_CONNECTED){
WiFi.begin(ssid, password);
Serial.println("WiFi failed, retrying.");
}
MDNS.begin(host);
httpUpdater.setup(&httpServer);
httpServer.begin();
void loop(void){
httpServer.handleClient();
}
Cung cp ng SSID v mt khu mng WiFi my tnh bn ang dng, np Firmware WebUpdater vo
ESP8266 Chn Board ESP8266 WiFi Uno trong Arduino IDE v Np chng trnh xung board dng
Arduino IDE
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 139/155
Khi bn khng th truy cp vo module ESP8266 theo cng Serial, th nhn din c a ch IP
ca module trong mng LAN, bn cn chy dch v mDNS trn my tnh. Dch v ny sn c trong
MacOS, tuy nhin, vi Linux th bn cn ci t Avahi: avahi.org/, cn Windows th Bonjour:
support.apple.com/downloads/bonjour_for_windows
Vi dch v mDNS chy trn my tnh, bn d dng truy cp vo ESP8266 theo ng dn esp8266-
webupdate.local/update
Bng cch chn file v nhn cp nht, ESP8266 s tin hnh cp nht firmware mi do bn gi ln.
File ny c th c xut ra bng cch Sketch > Export compiled Binary, v file .bin s nm trong th
mc ca Sketch
Hnh 71. Thc hin thnh cng cp nht Firmware s dng WebUpdater
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 141/155
Bo mt
M v d : File > Examples > ESP8266HTTPUpdateServer > SecureWebUpdater xem chi tit
142/155
HTTP Server
Vi 2 phng php trc, bn d dng cp nht Firmware thng qua mng WiFi ni b. Tuy nhin, khi
trin khai ng dng thc t, chng ta s cn cp nht Firmware t xa thng qua Internet, v cn 1
Server lu tr firmware, qun l cc phin bn.
Server khi nhn thy phin bn hin ti cn phi c nng cp, n s tr v firmware mi
thc hin c iu ny, chng ta cn thc hin trn c ESP8266 v trn Server side. Th nghim
trong mc ny, chng ta s dng Node.js lm server. Bn hon ton c th thc thi on code
Server ny v gn cho n domain c th truy cp t bt k u.
ESP8266 ESPhttpUpdate
Bn cn cung cp SSID, mt khu WiFi chnh xc, thc hin Chn Board ESP8266 WiFi Uno trong
Arduino IDE v Np chng trnh xung board dng Arduino IDE
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 143/155
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>
Serial.begin(115200);
Serial.println();
Serial.println();
Serial.print("ESP8266 http update, current version: ");
Serial.println(currentVersion);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
t_httpUpdate_return ret = ESPhttpUpdate.update(serverUrl, currentVersion);
switch (ret) {
case HTTP_UPDATE_FAILED:
Serial.printf("HTTP_UPDATE_FAILD Error (%d): %s", ESPhttpUpdate.getLastError(),
ESPhttpUpdate.getLastErrorString().c_str());
break;
case HTTP_UPDATE_NO_UPDATES:
Serial.println("HTTP_UPDATE_NO_UPDATES");
break;
case HTTP_UPDATE_OK:
Serial.println("HTTP_UPDATE_OK");
break;
}
void loop() {
}
Da trn kin thc phn Server Nodejs, chng ta xy dng 1 OTA Server dng Node.js nh sau
server.js
var fs = require('fs');
var url = require('url');
var http = require('http');
var querystring = require('querystring');
var crypto = require('crypto');
// function gi yu cu(response) t pha server hoc nhn yu cu (request) ca client gi ln
function requestHandler(request, response) {
// Gi s a ch yu cu firmware http://192.168.1.7:8000/firmware.bin
var uriData = url.parse(request.url);
var pathname = uriData.pathname; // /firmware.bin
if (pathname == '/firmware.bin') {
var ver = request.headers['x-esp8266-version'];
console.log('Client request update, version ', ver);
if(ver == '1.0') {
console.log('Send firmware 2.0 to client');
fs.readFile('./esp8266-firmware-2.0.bin', function(error, content) {
response.writeHead(200, {
'Content-Type': 'binary/octet-stream',
'Content-Length': Buffer.byteLength(content),
'x-MD5': crypto.createHash('md5').update(content).digest("hex")
});
response.end(content);
});
} else {
response.statusCode = 304;
response.end();
}
}
}
var server = http.createServer(requestHandler);
server.listen(8000);
console.log('Server listening on port 8000');
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 145/155
Cheatsheet
Phn ny cung cp thng tin cho vic tra cu nhanh cc hm c th s dng vi Arduino, ESP8266
v ngn ng lp trnh C. C rt nhiu th vin cho Arduino cung cp cc tnh nng hu ch thng qua
cc API cho php ngi s dng gi, ni dung tm lc y ch cp ti cc th vin thng
xuyn c s dng nht. Nu bn s dng cc th vin khc, hon ton c th tra cu d dng
trong ti liu s dng ca th vin . Thng thng cc th vin c pht hnh ngun m trn
Github s c file README.md cung cp y cc thng tin.
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 147/155
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 149/155
/* WEBSERVER */ mqtt.unSubscribe("/qos0");
/* My ch TCP ti port 80 s phn hi cc HTTP request /* Thc hin subscribe topic v publish cc message */
c gi ln t client */ mqtt.onSubscribe([](int sub_id)
ESP8266WebServer server (80); /* Publish 1 message "qos0" n topic /qos0 vi QoS =0,
/* Server bt u lng nghe cc client */ v Retain = 0 */
server.begin(); mqtt.publish("/qos0", "qos0", 0, 0);
/* Vit d liu n cc client */ /* Kt ni n server MQTT */
server.write(buf, len) mqtt.onConnect([]()
/* Khi to server a ch URL, handleRoot l ni /* Subscribe topic v nhn message ti topic /qos0 */
dung hoc hm s thc hin */ mqtt.subscribe("/qos0", 0)
server.on ( "URL", handleRoot ); /* Bt u truyn nhn d liu vi broker MQTT c url
/* Server tng tc vi client gi, nhn d liu */ mqtt://test.mosquitto.org ti port 1883 */
server.handleClient(); mqtt.begin("mqtt://test.mosquitto.org:1883")
/* Tr v 1 nu bin val c tn ti trn server */ /* Hm c gi trong loop() nhm khi to MQTT, kim
server.hasArg(val) tra x l cc d liu t cc topic, kim tra cc thuc
/* Ly gi tr ca bin val trn server */ tnh ca giao thc nh gi keep-a-live, QoS... */
server.arg(val); mqtt.handle();
/* Gi yu cu cp nht d liu t server:
code : HTTP code /* Cc hm ca th vin PubSubClient*/
text/html : nh dng tr v l file HTML /* Khai bo bin espClient thuc i tng client trong
content: Ni dung s tr v t pha server */ class PubSubClient */
server.send (code, "text/html",content); PubSubClient client(espClient);
/* Publish gi tin "Connected!" n topic ESP8266 */
/* MQTT */ client.publish("ESP8266", "Connected!");
/* /* Subscribe nhn cc message t topic ESP8266 */
Cc th vin h tr giao thc MQTT dnh cho ESP8266 client.subscribe("ESP8266");
trn arduino thng s dng l ESP8266MQTTClient /* Ci t server lng nghe client port 1883 */
v PubSubClient. Phn ny gii thch cc hm ca cc client.setServer(url_server, 1883);
th vin /* Gi hm callback thc hin cc chc nng
*/ publish/subcribe */
/* Cc hm ca th vin ESP8266MQTTClient*/ client.setCallback(callback);
/* Khai bo 1 bin mqtt thuc class MQTTClient */ /* Hm c gi trong loop() nhm khi to MQTT, kim
MQTTClient mqtt; tra
/* Ly d liu nhn c t topic subcribe */ x l cc d liu t cc topic, kim tra cc thuc tnh
mqtt.onData([](String topic, String data, bool cont) ca giao thc nh gi keep-a-live, gi tin QoS... */
/* Hy subcribe topic /qos0 */ client.loop();
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 151/155
C - Cheatsheet
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 153/155
www.cheatography.com/ashlyn-black/cheat-sheets/c-reference/
154/155
Li kt
Cc thnh vin tham gia ng gp.
4. L Phng Trnh - Thc tp sinh ti IoT Maker Vit Nam - Sinh vin i Hc Bch Khoa,
chuyn ngnh in t vin thng, kha hc 2014.
5. Trn Phc Vinh - Thc tp sinh ti IoT Maker Vit Nam - Sinh vin i Hc Bch Khoa,
chuyn ngnh k thut in, kha hc 2014.
V s ng gp ca cng ng ti arduino.esp8266.vn
Li kt.
Tht vui khi bn ng hnh cng chng ti i n ht cun sch ny. Mc ch ca cun sch l
gip nhng ngi mi bt u tm hiu v Internet Of Things (IoT) c kin thc c bn v hng i
chnh xc nghin cu v IoT mt cch nhanh chng hn. Hi vng cun sch s n tay tht nhiu
bn am m lnh vc cng ngh cn mi m nhng rt tim nng ny. Chc cc bn thnh cng trn
con ng m mnh chn.
Mc d c gng hon thnh tt nht ni dung cho cun sch, tuy nhin vn khng trnh khi
nhng thiu st. Mi kin ng gp xin gi mail v a ch support@iotmaker.vn
1. Webstore : iotmaker.vn/
2. Facebook : www.facebook.com/iotmaker.vn/
iotmaker.vn
Internet Of Things (IoT) cho ngi mi bt u 155/155
2. V ESP32 : esp32.vn
Bn quyn ton b ti liu ny thuc v IoT Maker Vit Nam, bn c min ph s dng cho
mc ch c nhn, hc tp v s dng trong cc d n ca mnh, khng c s dng cho mc
ch thng mi. Nu bn mun sa cha, phn phi li, bn bt buc phi gi nguyn giy
php v cn c s ng ca IoT Maker Vit Nam.