Slide 1

Slide 1 text

ESP8266 WORKSHOP mlwmlw 2

Slide 2

Slide 2 text

⺫⽬目標 對象:有 Arduino 基礎但沒碰過 ESP8266 宗旨:具備基本網路知識,能夠克服網路 問題,學會透過 ESP8266 並使⽤用 Web 技 術開發應⽤用。

Slide 3

Slide 3 text

前製作業 • Arduino IDE https://www.arduino.cc/en/Main/Software • Java https://java.com/zh_TW/download/ • Python https://www.python.org/downloads/release/python-279/ • 範例程式 https://github.com/mlwmlw/esp8266-workshop • cp2102 driver http://tw.silabs.com/products/mcu/Pages/ USBtoUARTBridgeVCPDrivers.aspx

Slide 4

Slide 4 text

WHO AM I Life Is Waiting

Slide 5

Slide 5 text

mlwmlw software engineer x web developer PHP、JavaScript、MySQL、Linux、Cloud

Slide 6

Slide 6 text

WHO AM I http://mlwmlw.org 軟體、學習、⽣生活..

Slide 7

Slide 7 text

WHO AM I Open source lover ⽤用軟體讓世界變更好⼀一點 addressbook.g0v.mlwmlw.org pcc.g0v.mlwmlw.org

Slide 8

Slide 8 text

WHY I AM HERE That is there’s some good in this world, Mr. Fordo. And it’s worth fighting for.

Slide 9

Slide 9 text

A STORY 到⼭山上種樹! 將作物重構成森林 預定未來的新鮮空氣 #科技農業

Slide 10

Slide 10 text

ARDUINO ZIGBEE WIFI BLE POWER SOLAR WATERPROOF SENSOR WSN

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

ARDUINO ZIGBEE WIFI BLE POWER SOLAR WATERPROOF SENSOR WSN

Slide 13

Slide 13 text

勞勞碌碌的學習 WEB 技術 我以為我是⼀一個 web developer .. 原來我是⼀一個 MAKER 囧 !?

Slide 14

Slide 14 text

⼤大綱 • ESP8266 • Ethernet x Web • Arduino Library • Arduino ESP8266 • IoT Service • 深⼊入 ESP8266 • nodeMCU & 其他韌體

Slide 15

Slide 15 text

ESP8266 蝦⽶米灣哥

Slide 16

Slide 16 text

ESP8266 OVERVIEW ~ RMB ¥9 Arduino + WIFI • Tensilica Xtensa lx3 RISC CPU 32bit 80MHz • ESP8266 SoC Expressif

Slide 17

Slide 17 text

EXPRESSIF ESP8266 SOC http://espressif.com/

Slide 18

Slide 18 text

AI-THINKER 安信可 http://www.ai-thinker.com/ ⽣生產 ESP-01 .. ESP-12 系列

Slide 19

Slide 19 text

其他廠商⽣生產 • OLIMEX ESP8266 • NodeMCU • Adafruit HUZZAH ESP8266 • …

Slide 20

Slide 20 text

ESP8266 HARDWARE • ROM 512KB >= Flash • GPIO • UART • SPI • PWM • ADC • I2C • 802.11 b/g/n 2.4GHz • 睡眠 < 10uA 規格書

Slide 21

Slide 21 text

FIRMWARE & SDK.. • Expressif ★★★★★ • SDK • AT Command • AI-thinker • 出廠預設韌體 ★★★★★ • AI-Cloud • NodeMCU ★★★★☆ • LUA Interpreter • Cesanta Smart.js ★★☆☆☆ • javascript 開發環境 v7 engine

Slide 22

Slide 22 text

FIRMWARE & SDK.. • OLIMEX • ESP8266 examples and toolchain setup • frankenstein • 像 AT ⼀一樣透過指令控制 • esp-open-sdk • open source toolchain • ESP8266 FreeRTOS

Slide 23

Slide 23 text

社群

Slide 24

Slide 24 text

bbs.espressif.com 定期釋出官⽅方 SDK ⺫⽬目前已到 1.4.0 ~ Bug Bounty Update (RTOS Bug Bounty Now US$500!)

Slide 25

Slide 25 text

www.ai-thinker.com 中⽂文社群、安信可會釋出其韌體

Slide 26

Slide 26 text

ESP8266.com 最活耀的 ESP8266 英⽂文社群

Slide 27

Slide 27 text

esp8266/Arduino ESP8266/arduino 活耀的開發與討論

Slide 28

Slide 28 text

bbs.nodemcu.com nodemcu 官⽅方中⽂文社群

Slide 29

Slide 29 text

esp8266.ru 戰⾾鬥⺠民族也懂 ESP8266!! XD esplorer 產地!

Slide 30

Slide 30 text

AI-THINKER 封裝差異

Slide 31

Slide 31 text

ESP8266EX PINS • GPIO x 11 • LNA 天線 • TOUT(ADC) • CHIP_EN • XPD_DCDC(Wake Up) • SDIO(SD Card) • UART(TX RX) • EXT_RSTB(RESET) • VDD • GND https://github.com/esp8266/esp8266-wiki/wiki/Pin-definition

Slide 32

Slide 32 text

ESP-01 TX GND CH_PD GPIO2 RST GPIO0 VCC RX • Flash 1MB • 無法直接插麵包板 • 轉接 or 公對⺟母杜邦 • GPIO x 2

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

ESP-03 • Flash 512KB • GPIO x 7 0/2/12/13/14/15/16 VCC ANT GPIO14 CH_PD GPIO12 GPIO16/18 GPIO13 RX GPIO15 TX GPIO2 NC GPIO0 GND

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

ESP-12 • Flash 4MB • GPIO x 9 • ADC • RST + GPIO16 (wake up) GND VCC GPIO15 GPIO13 GPIO2 GPIO12 GPIO0 GPIO14 GPIO5 GPIO16 GPIO4 CH_PD RX ADC TX REST

Slide 37

Slide 37 text

ESP-201 Flash 512KB GPIO0 GPIO15 GPIO2 GPIO13 D2 GPIO12 CLK GPIO14 CMD GPIO16 D0 CH_PD D1 REST D3 ADC GPIO4 GPIO5 VCC GND VCC GND VCC RX TX GND

Slide 38

Slide 38 text

模式 GPIO15 GPIO0 GPIO2 Mode Description L L H UART Download code from UART L H H Flash Boot from SPI Flash H x x SDIO Boot from SD- card

Slide 39

Slide 39 text

基本配線 ESP8266 VCC RX TX GND GPIO0 CH_PD USB TO UART 3.3v RX TX GND 正常模式 ESP8266 UART VCC 3.3V CH_PD 3.3V RX TX TX RX GPIO2 3.3V GPIO15 GND

Slide 40

Slide 40 text

基本配線 ESP8266 VCC RX TX GND GPIO0 CH_PD USB TO UART 3.3v RX TX GND 燒錄模式 ESP8266 UART VCC 3.3V CH_PD 3.3V RX TX TX RX GPIO0 GND GPIO2 3.3V GPIO15 GND

Slide 41

Slide 41 text

network First you hate them. Then you get used to them. Enough time passes, it gets so you depend on them. That’s institutionalized

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

網路組成元件 元件 功能 Router 路由器 轉送 IP 封包 (WAN) Switch 交換器 轉送 ethernet 訊框(LAN) IP 分享器 Router + Switch + DHCP +NAT 無線分享器 wifi + ip 分享器

Slide 44

Slide 44 text

SWITCH - LAN switch PC 192.168.1.3 PC 192.168.1.4 PC 192.168.1.2

Slide 45

Slide 45 text

SWITCH - LAN switch PC 192.168.1.3 PC 192.168.1.4 PC 192.168.1.2 192.168.1.4 你好

Slide 46

Slide 46 text

SWITCH - LAN switch PC 192.168.1.3 PC 192.168.1.4 PC 192.168.1.2 192.168.1.2 你也好

Slide 47

Slide 47 text

SWITCH - LAN switch PC 192.168.1.3 PC 192.168.1.4 PC 192.168.1.2 192.168.2.1 你好

Slide 48

Slide 48 text

SWITCH - LAN switch PC 192.168.1.3 PC 192.168.1.4 PC 192.168.1.2 192.168.2.1 你好 ?

Slide 49

Slide 49 text

DHCP

Slide 50

Slide 50 text

DHCP Dynamic Host Configuration Protocol,幫加⼊入此 區網的機器⾃自動分配 IP 的協定。

Slide 51

Slide 51 text

DHCP ⼀一台電腦插到 IP 分享器以後發⽣生什麼事?

Slide 52

Slide 52 text

DHCP PC bonjour 我想 上網 IP 分享器

Slide 53

Slide 53 text

DHCP PC 好! 192.168.1.101 有空房 你就住那吧 192.168.1.1 是管理室喔 IP 分享器

Slide 54

Slide 54 text

DHCP PC 192.168.1.101 IP 分享器 192.168.1.1

Slide 55

Slide 55 text

ROUTER - WAN switch PC 192.168.1.3 PC 192.168.1.4 PC 192.168.1.2 switch PC 192.168.2.3 PC 192.168.2.4 PC 192.168.2.2 Router 192.168.1.1 192.168.2.1 gateway gateway

Slide 56

Slide 56 text

ROUTER - WAN switch PC 192.168.1.3 PC 192.168.1.4 PC 192.168.1.2 Router 192.168.1.1 140.112.123.15 gateway Internet

Slide 57

Slide 57 text

ROUTER - WAN switch PC 192.168.1.3 PC 192.168.1.4 PC 192.168.1.2 Router 192.168.1.1 140.112.123.15 gateway Internet devices

Slide 58

Slide 58 text

ROUTER - NAT switch PC 192.168.1.3 PC 192.168.1.4 PC 192.168.1.2 Router 192.168.1.1 140.112.123.15 gateway Internet Network address translation

Slide 59

Slide 59 text

A⼤大樓 管理室 NAT C⼩小屋

Slide 60

Slide 60 text

NAT C⼩小屋 A⼤大樓 管理室

Slide 61

Slide 61 text

NAT C⼩小屋 A⼤大樓 管理室

Slide 62

Slide 62 text

NAT A⼤大樓 管理室 C⼩小屋

Slide 63

Slide 63 text

NAT A⼤大樓 管理室 C⼩小屋

Slide 64

Slide 64 text

NAT A⼤大樓 管理室 C⼩小屋

Slide 65

Slide 65 text

NETWORK ADDRESS TRANSLATION PC NAT Router PC PC Public Address Switch Private Address

Slide 66

Slide 66 text

Switch NETWORK ADDRESS TRANSLATION PC Router PC PC WAN(Public Address) IP 分享器 LAN

Slide 67

Slide 67 text

WIRELESS ACCESS POINT - AP Mobile Pad PC WIFI AP WIRELESS

Slide 68

Slide 68 text

WHAT IS Wi-Fi • 無線區域網路標準 IEEE 802.11 • v2 802.11b • v3 802.11g/a - 2.4GHz 5GHz • v4 801.11n bandwidth ~150 Mbit/s • v5 802.11ac bandwidth ~866.7 Mbit/s

Slide 69

Slide 69 text

Wi-Fi 名詞 • Access Point - AP:發送網路訊號 • Station - Client:接收訊號的裝置 • Service Set Identifier - SSID:AP 發送訊號的 名稱

Slide 70

Slide 70 text

ESP8266 • ESP8266 = Wi-Fi AP + Wi-Fi Client • 韌體內含 lwip - A Lightweight TCP/IP stack • 預設 SDK 不⽀支援 Forwarding X X

Slide 71

Slide 71 text

Protocol The darkest hour is that before the dawn.

Slide 72

Slide 72 text

PROTOCOL TCP/IP Stack 對應 Protocol Application Layer(Layer 7) HTTP、DNS、FTP、MQTT Host to Host Transport Layer Layer 4 TCP/UDP(Port) Internet Layer Layer 3 IP Network interface Layer Layer 2 Ethernet(MAC)

Slide 73

Slide 73 text

PACKET 四道⼯工法 data ⼀一 HTTP header data ⼆二 TCP header HTTP header data 三 IP header TCP header HTTP header data 四 ethernet header IP header TCP header HTTP header data

Slide 74

Slide 74 text

我在松⼭山⼯工農警衛室賣雞排 警衛室 松⼭山⼯工農住址 在警衛室的窗⼾戶排隊買 悠遊卡交易 想像

Slide 75

Slide 75 text

我在松⼭山⼯工農警衛室賣雞排 警衛室 - MAC Address (Layer 2) 松⼭山⼯工農住址 - IP Address (Layer 3) 在警衛室的窗⼾戶排隊買 - TCP Port 80(Layer 4) 悠遊卡交易 - HTTP (Layer 7) 想像對應

Slide 76

Slide 76 text

實際 架設⼀一個網⾴頁伺服器 電腦 A 的網卡 Mac address(56:50:7a:b0:6b:b8) ( Layer 2 ) 192.168.1.1 - IP address ( Layer 3 ) 使⽤用 TCP 監聽 Port 1234 ( Layer 4 ) 使⽤用 HTTP 協定( Layer 7 )

Slide 77

Slide 77 text

問答

Slide 78

Slide 78 text

NAT 問題 Q:NAT 內的機器無實體 IP,無法直接架設伺 服器 A:透過 AP 設定 Port 轉送

Slide 79

Slide 79 text

NAT 問題 1. 請管理室把所有包裹都送到我房間。 DMZ 轉送所有 Port 到某個 IP 140.112.123.15:* =>192.168.1.102:* 2. 請管理室把⿈黃⾊色包裹(Port 80)送到 102 室,綠⾊色包裹 (Port 21) 送到 103 室。 Virtual Server - Port forwarding 140.112.123.15:80 =>192.168.1.102:80 140.112.123.15:21 => 192.168.1.103:21

Slide 80

Slide 80 text

Arduino + ESP8266 練習使⽤用 Arduino 與 ESP8266 通訊 確認預設韌體 baud rate 的值 9600, 57600,115200

Slide 81

Slide 81 text

RX to D2(TX) TX to D3(RX) VCC to 3.3V CHIP_EN to 3.3V GPIO02 to 3.3V GPIO15 to GND GPIO0 GPIO2 D2 CLK CMD D0 D1 D3 GPIO4 VCC VCC GPIO15 GPIO13 GPIO12 GPIO14 GPIO16 CH_PD REST ADC GPIO5 GND GND 與 ARDUINO 連接

Slide 82

Slide 82 text

與 ARDUINO 連接

Slide 83

Slide 83 text

程式 #include SoftwareSerial mySerial(3, 2); /* RX:D3, TX:D2 */ void setup() { mySerial.begin(9600); Serial.begin(9600); Serial.println("start"); } void loop() { if (mySerial.available()) { Serial.write(mySerial.read()); } if (Serial.available()) { char chars = Serial.read(); mySerial.write(chars); } } esp8266-workshop/software-serial

Slide 84

Slide 84 text

練習⼀一 AT 指令

Slide 85

Slide 85 text

ESP8266 USB-UART 直接⽤用 CP2102 與 ESP8266 通訊 模式切換 認識韌體燒錄⼯工具 記得安裝驅動程式

Slide 86

Slide 86 text

與 CP2102 連接

Slide 87

Slide 87 text

ESPLORER IDE For ESP8266 需安裝 Java ⽀支援 NodeMCU AT Command Serial Console http://esp8266.ru/esplorer/

Slide 88

Slide 88 text

AT Command AT Command Reference

Slide 89

Slide 89 text

WHAT IS AT • 海斯命令集(Hayes command set;AT command set)原本是為了海斯智慧300數據機所開發的⼀一 種命令語⾔言 • 指令都是 AT+ 開頭,假設有指令 CMD • AT+CMD? 查詢 CMD 的值 • AT+CMD=XXX 設定 CMD = XXX • AT+CMD 執⾏行指令 CMD

Slide 90

Slide 90 text

ESP8266 AT COMMAND • 官⽅方提供的韌體,SDK 的功能實踐,直接透 過 Serial 操作 ESP • Wi-Fi 組態 • 取得網路狀態 • TCP/IP 指令 • 確保送出換⾏行符號

Slide 91

Slide 91 text

BASIC • AT 測試指令 • AT+RST 重開機 • AT+GMR 取得韌體版本

Slide 92

Slide 92 text

WIFI 模式 • AT+CWMODE 模式選擇 • AT+CWMODE=1 Station • AT+CWMODE=2 AP • AT+CWMODE=3 Station+AP

Slide 93

Slide 93 text

WIFI STATION • AT+CWLAP 列出附近的 2.4G AP • AT+CWJAP 連線到某台 AP • AT+CWJAP="TP-LINK","1234567890" • AT+CIPSTA? 查詢取得的 IP • AT+CWQAP 斷線

Slide 94

Slide 94 text

WIFI AP • AT+CWSAP 設定 AP 參數 • SSID、密碼、頻道、加密⽅方式(0~3) • AT+CWSAP=“esp8266","1234567890",5,3 • AT+CWLIF 列出連到此台 AP 的裝置 • AT+CWDHCP 是否啟⽤用 DHCP • AT+CWDHCP=0,1

Slide 95

Slide 95 text

更新韌體

Slide 96

Slide 96 text

燒錄模式 硬體配置 GPIO0 to GND

Slide 97

Slide 97 text

ESPTOOL https://github.com/themadinventor/esptool ESP8266 ROM Bootloader utility 需安裝 Python 跟 easy_install setup.py $ python esptool.py -p /dev/tty.SLAB_USBtoUART write_flash 0x000000 ai-thinker-0.9.5.2-9600.bin

Slide 98

Slide 98 text

NODEMCU FLASHER https://github.com/nodemcu/nodemcu-flasher Windows 視窗化⼯工具 #注意系統版本32 or 64 設定燒錄 baud rate 115200, Flash Size 512KB

Slide 99

Slide 99 text

SMART.JS FLASHNCHIPS https://github.com/cesanta/smart.js/releases smart.js 的燒錄⼯工具,有 Mac & Win 版 除了 smart.js 適合以外其實不太⽅方便-_-

Slide 100

Slide 100 text

WeeESP8266

Slide 101

Slide 101 text

WHAT IS WEEESP8266 An easy-to-use Arduino ESP8266 library besed on AT firmware. 把 AT Command 包裝成 arduino 的 API 就是幫你下指令啦 https://github.com/itead/ITEADLIB_Arduino_WeeESP8266

Slide 102

Slide 102 text

DOCUMENTATION http://docs.iteadstudio.com/ITEADLIB_Arduino_WeeESP8266/ index.html

Slide 103

Slide 103 text

API wifi.setOprToStation() 切成 Station wifi.joinAP(SSID, PASSWORD) 加⼊入 AP wifi.getLocalIP() 取得 IP

Slide 104

Slide 104 text

安裝 Arduino > Sketch > manage Libraries.. Search WEEESP8266 > install

Slide 105

Slide 105 text

練習⼆二 透過 WeeESP8266 連接 AP #include #include "ESP8266.h" #define SSID "TP-LINK" #define PASSWORD "1234567890" SoftwareSerial mySerial(3, 2); ESP8266 wifi(mySerial); void setup(void) { Serial.begin(9600); Serial.print("setup begin\r\n"); Serial.print("FW Version: "); Serial.println(wifi.getVersion().c_str()); esp8266-workshop/WeeESP8266-client if (wifi.setOprToStation()) { Serial.print("to station ok\r\n"); } else { Serial.print("to station err\r\n"); } if (wifi.joinAP(SSID, PASSWORD)) { Serial.print("Join AP success\r\n"); Serial.print("IP: "); Serial.println(wifi.getLocalIP().c_str()); } else { Serial.print("Join AP failure\r\n"); } Serial.print("setup end\r\n"); }

Slide 106

Slide 106 text

範例 修改 ESP8266.h 啟⽤用 softwareSerial #define ESP8266_USE_SOFTWARE_SERIAL

Slide 107

Slide 107 text

結果

Slide 108

Slide 108 text

HTTP

Slide 109

Slide 109 text

HTTP SERVER ⼀一個監聽 Port 80 的常駐程式 HTTP Server

Slide 110

Slide 110 text

HTTP CLIENT 去跟 HTTP Server 要求資料的程式 HTTP Client (Browser)

Slide 111

Slide 111 text

HTTP PROCESS Browser HTTP Server 1. HTTP Request 2. HTTP Response http://tw.yahoo.com

Slide 112

Slide 112 text

HTTP PROTOCOL HyperText Transfer Protocol 超⽂文本傳輸協定 TCP Port 80 透過⽂文字指令,傳輸 HTML 的協定 (HTML)

Slide 113

Slide 113 text

HTTP REQUEST GET / HTTP/1.1 Host: www.google.com

Slide 114

Slide 114 text

HTTP RESPONSE HTTP/1.1 200 OK Content-Length: 12 Server: Apache Date: Sat, 11 Jan 2015 02:44:04 GMT Content-Type: text/html Connection: keep-alive Hello World!

Slide 115

Slide 115 text

HTTP RESPONSE CODE 200 成功請求 302 重新導向,轉址 404 請求錯誤,找不到網⾴頁 500 伺服器錯誤

Slide 116

Slide 116 text

HTTP METHOD GET 取得資料
 POST 提交資料 DELETE 刪除資料 PUT 更新資料

Slide 117

Slide 117 text

TELNET HTTP

Slide 118

Slide 118 text

CURL SEE-URL

Slide 119

Slide 119 text

練習三 透過 WeeESP8266 建⽴立 Web Server esp8266-workshop/WeeESP8266-web-server

Slide 120

Slide 120 text

流程 啟動 MUX 監聽 TCP Port 80 接收到瀏覽器請求(mux id) 回應 header + HTML 完成關閉連線

Slide 121

Slide 121 text

API wifi.enableMUX() Enable IP MUX(multiple connection mode) wifi.startTCPServer(port) Start TCP Server(Only in multiple mode). wifi.recv(mux_id, buffer, length, timeout); Receive data from TCP or UDP builded already in multiple mode.

Slide 122

Slide 122 text

EXAMPLE SETUP void setup(void) { if (wifi.enableMUX()) { Serial.print("multiple ok\r\n"); } else { Serial.print("multiple err\r\n"); } if (wifi.startTCPServer(80)) { Serial.print("start tcp server ok\r\n"); } else { Serial.print("start tcp server err\r\n"); } }

Slide 123

Slide 123 text

EXAMPLE LOOP void loop(void) { uint8_t buffer[128] = {0}; uint8_t mux_id; uint32_t len = wifi.recv(&mux_id, buffer, sizeof(buffer), 100); if (len > 0) { uint8_t header[] = "HTTP/1.1 200 OK\r\n" "Content-Length: 24\r\n" "Server: ESP8266\r\n" "Content-Type: text/html\r\n" "Connection: keep-alive\r\n\r\n"; uint8_t hello[] = "

Hello ESP8266!!

"; wifi.send(mux_id, header, sizeof(header)); wifi.send(mux_id, hello, sizeof(hello)); if (wifi.releaseTCP(mux_id)) { Serial.print("release tcp "); Serial.print(mux_id); Serial.println(" ok"); } } }

Slide 124

Slide 124 text

結果 HTTP/1.1 200 OK Content-Length: 24 Server: ESP8266 Content-Type: text/html Connection: keep-alive

Hello ESP8266!!

Slide 125

Slide 125 text

Web 概念

Slide 126

Slide 126 text

WEB 組成 前端 渲染畫⾯面 HTML 資料 CSS 畫⾯面 JavaScript UI 後端 產出 HTML 處理資料庫 Server Browser CSS HTML JavaScript HTTP DB File Sensor…

Slide 127

Slide 127 text

RESTFUL WEB SERVICE Based on HTTP 每⼀一個 URI 都是⼀一個資源 針對資源進⾏行操作 查詢(GET)、新增(POST) 修改(PUT)、刪除(DELETE)

Slide 128

Slide 128 text

RESTFUL WEB SERVICE POST http://mlwmlw.org/article/ GET http://mlwmlw.org/article/1 PUT http://mlwmlw.org/article/1 DELETE http://mlwmlw.org/article/1

Slide 129

Slide 129 text

HTML 
 設定 內容

Slide 130

Slide 130 text

HTML 內容

標題

段落

⽂文章 章節

Slide 131

Slide 131 text

HTML 表單 按鈕 輸⼊入框 表單

Slide 132

Slide 132 text

IOT Service

Slide 133

Slide 133 text

WHY 如何彙整感測器收集到的資料 需要資料庫 雲端化、服務化 IOT Service

Slide 134

Slide 134 text

IOT SERVEICE RESTFul API 上傳資料 視覺化呈現資料 組態、分享、匯出、通知..

Slide 135

Slide 135 text

THINGSPEAK The open data platform for the Internet of Things https://thingspeak.com/

Slide 136

Slide 136 text

CHANNEL

Slide 137

Slide 137 text

NEW CHANNEL

Slide 138

Slide 138 text

NEW CHANNEL

Slide 139

Slide 139 text

MY CHANNEL

Slide 140

Slide 140 text

API KEYS

Slide 141

Slide 141 text

API KEYS

Slide 142

Slide 142 text

SENDING DATA https://api.thingspeak.com/update?key=key&field1=123 POST https://api.thingspeak.com/update? api_key=key&field1=123

Slide 143

Slide 143 text

圖表

Slide 144

Slide 144 text

⾃自訂圖表

Slide 145

Slide 145 text

SPARK FUN a place to push your data

Slide 146

Slide 146 text

CREATE A DATA STREAM

Slide 147

Slide 147 text

STREAM

Slide 148

Slide 148 text

PUSH DATA http://data.sparkfun.com/input/QGxWK3RzNdslXlnoNddo? private_key=JqxmeGadRlta4ajVZzzV&sensor=3.29

Slide 149

Slide 149 text

RESULT https://data.sparkfun.com/streams/QGxWK3RzNdslXlnoNddo

Slide 150

Slide 150 text

GOOGLE DOCS 匯出 csv 倒⼊入 google docs sheets ⾃自訂圖表分析

Slide 151

Slide 151 text

使⽤用 HTML 送出資料 esp8266-workshop/post.html

Slide 152

Slide 152 text

使⽤用 AT 送出資料 # 建⽴立 TCP 連線 AT+CIPSTART=“TCP","api.thingspeak.com",80 # 連線狀態 AT+CIPSTATUS # 送出資料=資料⻑⾧長度 AT+CIPSEND=82 # 輸⼊入 HTTP Header GET /update? key=WXRLPJC4T2I1RRSP&field1=88 HTTP/1.1 Host: api.thingspeak.com # 連線結束 AT+CIPCLOSE

Slide 153

Slide 153 text

使⽤用 AT 送出資料

Slide 154

Slide 154 text

練習四 透過 Arduino 讀取⼟土壤溼度 並⽤用 WeeESP8266 送⾄至 IOT Service

Slide 155

Slide 155 text

http://www.tiagoespinha.net/2014/05/project-how-to-easily-monitor-your-plants-soil-humidity/ VCC 3.3 ~ 5v GND 數位輸出 類⽐比輸出 soil moisture sensor YL-69 控制數位輸出準位

Slide 156

Slide 156 text

線路

Slide 157

Slide 157 text

程式 wifi.createTCP(HOST_NAME, HOST_PORT) String http = String(); http += "GET /update?key="; http += KEY; http += "&field1=" + String(analogRead(7)); http += " HTTP/1.1\r\n"; http += "Host: api.thingspeak.com\r\n"; http += "Connection: close\r\n\r\n"; Serial.println(http); wifi.send((const uint8_t*)http.c_str(), http.length()); uint32_t len = wifi.recv(buffer, sizeof(buffer), 10000); if (len > 0) { for(uint32_t i = 0; i < len; i++) { Serial.print((char)buffer[i]); } Serial.print("]\r\n"); } wifi.releaseTCP(); esp8266-workshop/WeeESP8266-thingspeak

Slide 158

Slide 158 text

結果 https://thingspeak.com/channels/56216

Slide 159

Slide 159 text

注意 我的這塊 Uno 無法讓 esp 順利建⽴立 tcp 連線.. :( 各種變異版本 arduino LDO 採⽤用不同晶⽚片 AMS1117、AX1117 (供應電流不同)

Slide 160

Slide 160 text

Arduino ESP8266 「ESP8266的價格就跟那些多到像是⽤用⼤大砲發射後的感應器碎⽚片⼀一樣便宜。」- 布萊恩‧ 傑普森(Brian Jepson)

Slide 161

Slide 161 text

WHAT 把 ESP8266 ⽤用 Arduino ⽅方式開發 http://arduino.esp8266.com/versions/1.6.5-947-g39819f0/doc/reference.html 除了少幾根筋,幾乎都有 脫掉累贅直接⽤用 Arduino IDE 開發

Slide 162

Slide 162 text

有什麼? • Digital IO • Analog input *1 • Analog output • Timing • Serial • Wi-Fi • Ticker • EEPROM • I2C • SPI • ESP-specific APIs

Slide 163

Slide 163 text

安裝 http://arduino.esp8266.com/staging/package_esp8266com_index.json

Slide 164

Slide 164 text

安裝

Slide 165

Slide 165 text

安裝

Slide 166

Slide 166 text

安裝

Slide 167

Slide 167 text

模組選擇

Slide 168

Slide 168 text

功能

Slide 169

Slide 169 text

配線

Slide 170

Slide 170 text

燒錄

Slide 171

Slide 171 text

ESP-201 Flash 512KB GPIO0 GPIO15 GPIO2 GPIO13 D2 GPIO12 CLK GPIO14 CMD GPIO16 D0 CH_PD D1 REST D3 ADC GPIO4 GPIO5 VCC GND VCC GND VCC RX TX GND

Slide 172

Slide 172 text

A REST https://github.com/marcoschwartz/aREST 把 Arduino 變成⼀一個 web service 透過 http api 讀寫 GPIO

Slide 173

Slide 173 text

A REST 切換模式 INPUT http://192.168.0.100/mode/5/i OUTPUT http://192.168.0.100/mode/5/o 修改狀態 低電位 http://192.168.0.100/digital/5/0 ⾼高電位 http://192.168.0.100/digital/5/1 定義變數與函式 rest.variable(“led",&led); rest.function(“led", ledControl);

Slide 174

Slide 174 text

練習五 使⽤用 GPIO 透過 aREST 開關 LED 讀取⼟土壤感測器的值

Slide 175

Slide 175 text

程式 #include #include aREST rest = aREST(); WiFiServer server(80); void setup() { rest.set_id("1"); rest.set_name("esp8266"); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("WiFi connected"); // Start the server server.begin(); // Print the IP address Serial.println(WiFi.localIP()); } void loop() { WiFiClient client = server.available(); if (!client) { return; } while(!client.available()){ delay(1); } rest.handle(client); }

Slide 176

Slide 176 text

測試

Slide 177

Slide 177 text

ADC

Slide 178

Slide 178 text

ADC Mode ADC_MODE(ADC_VCC); 不接 AOUT 輸出量測電源電壓 ADC_MODE(ADC_TOUT); 讀取類⽐比輸⼊入 ESP8266 has a single ADC channel available to users. It may be used either to read voltage at ADC pin, or to read module supply voltage (VCC)

Slide 179

Slide 179 text

ADC 只能輸⼊入 0 ~1V 需⽤用電阻分壓輸⼊入 3.3v x 10k/22k+10k =1v 燒毀注意

Slide 180

Slide 180 text

範例 10K 22K

Slide 181

Slide 181 text

耗電

Slide 182

Slide 182 text

耗電情況 Mode Typical Units 802.11n, MCS7, POUT =+14dBm 135 mA 802.11b, packet size of 1024 bytes, -80dBm 60 mA Standby 0.9 uA Deep sleep 10 mA Shutdown 0.5 uA

Slide 183

Slide 183 text

耗電測試 CP2102 supply current ~20mA CP2102 + ESP8266 = 95mA

Slide 184

Slide 184 text

deep sleep GPIO16 接 RESET 才能透過硬體叫床 待機時電壓為 10mA?

Slide 185

Slide 185 text

deep sleep API #include "ESP8266WiFi.h" void setup() { Serial.begin(9600); delay(10000); } void loop() { Serial.println("sleep"); ESP.deepSleep(1000000 * 10); } ESP.deepSleep(μs); esp8266-workshop/deepsleep

Slide 186

Slide 186 text

deep sleep current 22.7m - CP2102 ~= 1mA

Slide 187

Slide 187 text

I2C LCD

Slide 188

Slide 188 text

Inter-Integrated Circuit SCL SDA 因為 LCD 吃 5v 所以 I2C 轉接板 也需供 5v 電喔! 透過 CP2102 輸⼊入 CP2102 5V

Slide 189

Slide 189 text

LiquidCrystal I2C library

Slide 190

Slide 190 text

LCD API #include #include // set the LCD address to 0x20 or 0x27 for a 16 chars and 2 line display LiquidCrystal_I2C lcd(0x20, 16, 2); void setup() { lcd.init(); // initialize the lcd lcd.backlight(); lcd.print("ESP8266"); lcd.setCursor(0, 1); lcd.print("Arduino x Wi-Fi!”); }

Slide 191

Slide 191 text

結果

Slide 192

Slide 192 text

n = WiFi.scanNetworks() 掃描 Access Point SSID = WiFi.SSID(i) 取得第 i 個 SSID SSID = WiFi.RSSI(i) 取得第 i 個 RSSI Received Signal Strength Indication 信號強度,越接近零越好 ESP8266 API 掃描 AP

Slide 193

Slide 193 text

ESP8266 API 掃描 AP void loop() { int n = WiFi.scanNetworks(); if (n == 0) { Serial.println("no networks found"); return; } Serial.print(n); Serial.println(" networks found"); for (int i = 0; i < n; ++i) { // Print SSID and RSSI for each network found lcd.clear(); lcd.setCursor(0, 0); lcd.print(i + 1); lcd.print(". "); lcd.print(WiFi.SSID(i)); lcd.setCursor(0, 1); lcd.print("RSSI: "); lcd.print(WiFi.RSSI(i)); } } esp8266-workshop/i2c-lcd

Slide 194

Slide 194 text

SPIFFS

Slide 195

Slide 195 text

SPIFFS https://github.com/pellepl/spiffs Wear-leveled SPI flash file system for embedded devices 把 EEPROM 變成檔案系統 可⽤用於儲存 config 或 log NodeMCU 與 ESP8266/Arduino 皆有

Slide 196

Slide 196 text

SPIFFS

Slide 197

Slide 197 text

SPIFFS API SPIFFS.begin() 初始化 SPIFFS.open(“abc.txt”, “r”) file.readStringUntil('\n') 讀取 SPIFFS.open(“abc.txt”, “w”) file.println(input) 寫⼊入

Slide 198

Slide 198 text

SPIFFS API EXAMPLE #include “FS.h" SPIFFS.begin() File file = SPIFFS.open("/config.txt", "w"); file.println(“hello”); File file = SPIFFS.open("/config.txt", "r"); Serial.println(file.readStringUntil('\n'));

Slide 199

Slide 199 text

練習七 esp8266-workshop/spiffs 透過 Serial 輸⼊入 SSID 帳號密碼 存在 SPIFFS 重啟後讀出

Slide 200

Slide 200 text

再論韌體

Slide 201

Slide 201 text

再論韌體 官⽅方 SDK + AT Command 1.0 以後需要 1MB Flash ⺫⽬目前韌體⼤大都基於 0.9.5 SDK 開發 只需 512KB Flash AT Command 沒 Open Source

Slide 202

Slide 202 text

再論韌體 Arduino/ESP8266 獨樹⼀一格的 Arduino 發展迅速、社群活躍 增加實⽤用的擴充模組(SPIFFS)

Slide 203

Slide 203 text

再論韌體 NodeMCU 近似 nodejs 的 API 軟硬兼施 ⼤大陸中⽂文社群 Lua 開發快速 API ⽂文件完整

Slide 204

Slide 204 text

再論韌體 Smart.js Cesanta 公司發展(商業⽀支援) v7 embedded JavaScript Engine JavaScript 社群完整 還在 alpha ..

Slide 205

Slide 205 text

再論韌體 Sming - Open Source framework for high efficiency native ESP8266 development ⾮非 Arduino 的 ESP8266 韌體開發環境, 應⽤用範例多,最豐富的 SDK 範例

Slide 206

Slide 206 text

NodeMCU

Slide 207

Slide 207 text

開發軟體需要⼩小⼑刀 透過 Lua 與 esplorer IDE 開發 先刷韌體 nodemcu_float_0.9.5.bin

Slide 208

Slide 208 text

NODEMCU STUDIO http://bbs.nodemcu.com/t/nodemcu-studio-ban-ben-geng-xin-wei- build20150111-update-to-version-build20150111/64 nodemcu spiffs 檔案上傳⼯工具For Windows

Slide 209

Slide 209 text

ESPLORER NODEMCU 也可開發 nodeMCU 喔

Slide 210

Slide 210 text

ESPLORER NODEMCU 輸⼊入 Lua Shell框 連線設定 輸出

Slide 211

Slide 211 text

ESPLORER NODEMCU 上傳⾄至 SPIFFS Lua 程式編輯區 檔案操作區

Slide 212

Slide 212 text

NODEMCU DOCUMENTATION http://www.nodemcu.com/docs/node-module/

Slide 213

Slide 213 text

WIFI CONNECT 儲存成 init.lua 等同於 arduino setup() print("hello nodemcu"); wifi.setmode(wifi.STATION); wifi.sta.config("TP-LINK", "1234567890"); wifi.sta.connect(); tmr.alarm(1, 1000, 1, function() if wifi.sta.getip() == nil then print("Wating...") else tmr.stop(1) print("IP is"..wifi.sta.getip()) end end) tmr.alarm(id, interval, repeat, function do()) esp8266-workshop/wifi-connect

Slide 214

Slide 214 text

WIFI CONNECT 上傳只是透過 Serial Shell 寫⼊入檔案 dofile(“init.lua”)

Slide 215

Slide 215 text

I2C LCD https://github.com/dvv/nodemcu-thingies/blob/master/lcd1602.lua NodeMCU GPIO Map 查詢 I2C pins NodeMCU 1602 library

Slide 216

Slide 216 text

I2C LCD esp8266-workshop/i2c-lcd 不需更新韌體 可管理的檔案系統 以軟體⽅方式開發

Slide 217

Slide 217 text

練習⼋八 使⽤用 nodemcu 製作 LCD 留⾔言板 透過 Web API ⽅方式更新留⾔言 esp8266-workshop/nodemcu/web-guestbook

Slide 218

Slide 218 text

WEB SERVER srv = net.createServer(net.TCP) srv:listen(80, function(conn) conn:on("receive", function(client, request) local buf = ""; local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)\?(.+) HTTP"); if(method == nil)then _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP"); end local _GET = {} if (vars ~= nil)then for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do _GET[k] = v end end buf = buf.."

ESP8266 Web Server

"; client:send(buf); client:close(); collectgarbage(); end) end)

Slide 219

Slide 219 text

WEB SERVER PARSE HEADER http://www.regexr.com/

Slide 220

Slide 220 text

WEB SERVER srv = net.createServer(net.TCP) srv:listen(80, function(conn) conn:on("receive", function(client, request) local buf = ""; local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP"); if(method == nil)then _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP"); end local _GET = {} if (vars ~= nil)then for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do _GET[k] = v end end buf = buf.."

ESP8266 Web Server

"; client:send(buf); client:close(); collectgarbage(); end) end)

Slide 221

Slide 221 text

WEB SERVER

Slide 222

Slide 222 text

Smart.js

Slide 223

Slide 223 text

動⼿手玩玩看~

Slide 224

Slide 224 text

希望⼤大家都有收穫:O

Slide 225

Slide 225 text

開始動⼿手吧!

Slide 226

Slide 226 text

參考資料 • https://nurdspace.nl/ESP8266 • http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family • http://arduino.esp8266.com/versions/1.6.5-990-gc8a63ce/doc/ reference.html • http://arduino.esp8266.com/versions/1.6.5-947-g39819f0/doc/ reference.html • http://mlwmlw.org/2015/07/%E6%B7%B1%E5%85%A5%E6%B7%BA %E5%87%BA-wifi-%E6%99%B6%E7%89%87-esp8266-with-arduino/