Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ESP8266-workshop

0b57b8c75cfe984475b94fe0847f7665?s=47 mlwmlw
September 19, 2015

 ESP8266-workshop

0b57b8c75cfe984475b94fe0847f7665?s=128

mlwmlw

September 19, 2015
Tweet

Transcript

  1. ESP8266 WORKSHOP mlwmlw 2

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

    技 術開發應⽤用。
  3. 前製作業 • 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
  4. WHO AM I Life Is Waiting

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

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

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

  8. WHY I AM HERE That is there’s some good in

    this world, Mr. Fordo. And it’s worth fighting for.
  9. A STORY 到⼭山上種樹! 將作物重構成森林 預定未來的新鮮空氣 #科技農業

  10. ARDUINO ZIGBEE WIFI BLE POWER SOLAR WATERPROOF SENSOR WSN

  11. None
  12. ARDUINO ZIGBEE WIFI BLE POWER SOLAR WATERPROOF SENSOR WSN

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

    !?
  14. ⼤大綱 • ESP8266 • Ethernet x Web • Arduino Library

    • Arduino ESP8266 • IoT Service • 深⼊入 ESP8266 • nodeMCU & 其他韌體
  15. ESP8266 蝦⽶米灣哥

  16. ESP8266 OVERVIEW ~ RMB ¥9 Arduino + WIFI • Tensilica

    Xtensa lx3 RISC CPU 32bit 80MHz • ESP8266 SoC Expressif
  17. EXPRESSIF ESP8266 SOC http://espressif.com/

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

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

    • …
  20. ESP8266 HARDWARE • ROM 512KB >= Flash • GPIO •

    UART • SPI • PWM • ADC • I2C • 802.11 b/g/n 2.4GHz • 睡眠 < 10uA 規格書
  21. FIRMWARE & SDK.. • Expressif ★★★★★ • SDK • AT

    Command • AI-thinker • 出廠預設韌體 ★★★★★ • AI-Cloud • NodeMCU ★★★★☆ • LUA Interpreter • Cesanta Smart.js ★★☆☆☆ • javascript 開發環境 v7 engine
  22. FIRMWARE & SDK.. • OLIMEX • ESP8266 examples and toolchain

    setup • frankenstein • 像 AT ⼀一樣透過指令控制 • esp-open-sdk • open source toolchain • ESP8266 FreeRTOS
  23. 社群

  24. bbs.espressif.com 定期釋出官⽅方 SDK ⺫⽬目前已到 1.4.0 ~ Bug Bounty Update (RTOS

    Bug Bounty Now US$500!)
  25. www.ai-thinker.com 中⽂文社群、安信可會釋出其韌體

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

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

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

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

  30. AI-THINKER 封裝差異

  31. 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
  32. ESP-01 TX GND CH_PD GPIO2 RST GPIO0 VCC RX •

    Flash 1MB • 無法直接插麵包板 • 轉接 or 公對⺟母杜邦 • GPIO x 2
  33. None
  34. 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
  35. None
  36. 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
  37. 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
  38. 模式 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
  39. 基本配線 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
  40. 基本配線 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
  41. network First you hate them. Then you get used to

    them. Enough time passes, it gets so you depend on them. That’s institutionalized
  42. None
  43. 網路組成元件 元件 功能 Router 路由器 轉送 IP 封包 (WAN) Switch

    交換器 轉送 ethernet 訊框(LAN) IP 分享器 Router + Switch + DHCP +NAT 無線分享器 wifi + ip 分享器
  44. SWITCH - LAN switch PC 192.168.1.3 PC 192.168.1.4 PC 192.168.1.2

  45. SWITCH - LAN switch PC 192.168.1.3 PC 192.168.1.4 PC 192.168.1.2

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

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

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

    192.168.2.1 你好 ?
  49. DHCP

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

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

  52. DHCP PC bonjour 我想 上網 IP 分享器

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

  54. DHCP PC 192.168.1.101 IP 分享器 192.168.1.1

  55. 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
  56. 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
  57. 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
  58. 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
  59. A⼤大樓 管理室 NAT C⼩小屋

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

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

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

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

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

  65. NETWORK ADDRESS TRANSLATION PC NAT Router PC PC Public Address

    Switch Private Address
  66. Switch NETWORK ADDRESS TRANSLATION PC Router PC PC WAN(Public Address)

    IP 分享器 LAN
  67. WIRELESS ACCESS POINT - AP Mobile Pad PC WIFI AP

    WIRELESS
  68. 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
  69. Wi-Fi 名詞 • Access Point - AP:發送網路訊號 • Station -

    Client:接收訊號的裝置 • Service Set Identifier - SSID:AP 發送訊號的 名稱
  70. ESP8266 • ESP8266 = Wi-Fi AP + Wi-Fi Client •

    韌體內含 lwip - A Lightweight TCP/IP stack • 預設 SDK 不⽀支援 Forwarding X X
  71. Protocol The darkest hour is that before the dawn.

  72. 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)
  73. 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
  74. 我在松⼭山⼯工農警衛室賣雞排 警衛室 松⼭山⼯工農住址 在警衛室的窗⼾戶排隊買 悠遊卡交易 想像

  75. 我在松⼭山⼯工農警衛室賣雞排 警衛室 - MAC Address (Layer 2) 松⼭山⼯工農住址 - IP

    Address (Layer 3) 在警衛室的窗⼾戶排隊買 - TCP Port 80(Layer 4) 悠遊卡交易 - HTTP (Layer 7) 想像對應
  76. 實際 架設⼀一個網⾴頁伺服器 電腦 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 )
  77. 問答

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

    轉送
  79. 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
  80. Arduino + ESP8266 練習使⽤用 Arduino 與 ESP8266 通訊 確認預設韌體 baud

    rate 的值 9600, 57600,115200
  81. 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 連接
  82. 與 ARDUINO 連接

  83. 程式 #include <SoftwareSerial.h> 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
  84. 練習⼀一 AT 指令

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

  86. 與 CP2102 連接

  87. ESPLORER IDE For ESP8266 需安裝 Java ⽀支援 NodeMCU AT Command

    Serial Console http://esp8266.ru/esplorer/
  88. AT Command AT Command Reference

  89. WHAT IS AT • 海斯命令集(Hayes command set;AT command set)原本是為了海斯智慧300數據機所開發的⼀一 種命令語⾔言

    • 指令都是 AT+ 開頭,假設有指令 CMD • AT+CMD? 查詢 CMD 的值 • AT+CMD=XXX 設定 CMD = XXX • AT+CMD 執⾏行指令 CMD
  90. ESP8266 AT COMMAND • 官⽅方提供的韌體,SDK 的功能實踐,直接透 過 Serial 操作 ESP

    • Wi-Fi 組態 • 取得網路狀態 • TCP/IP 指令 • 確保送出換⾏行符號
  91. BASIC • AT 測試指令 • AT+RST 重開機 • AT+GMR 取得韌體版本

  92. WIFI 模式 • AT+CWMODE 模式選擇 • AT+CWMODE=1 Station • AT+CWMODE=2

    AP • AT+CWMODE=3 Station+AP
  93. WIFI STATION • AT+CWLAP 列出附近的 2.4G AP • AT+CWJAP 連線到某台

    AP • AT+CWJAP="TP-LINK","1234567890" • AT+CIPSTA? 查詢取得的 IP • AT+CWQAP 斷線
  94. WIFI AP • AT+CWSAP 設定 AP 參數 • SSID、密碼、頻道、加密⽅方式(0~3) •

    AT+CWSAP=“esp8266","1234567890",5,3 • AT+CWLIF 列出連到此台 AP 的裝置 • AT+CWDHCP 是否啟⽤用 DHCP • AT+CWDHCP=0,1
  95. 更新韌體

  96. 燒錄模式 硬體配置 GPIO0 to GND

  97. 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
  98. NODEMCU FLASHER https://github.com/nodemcu/nodemcu-flasher Windows 視窗化⼯工具 #注意系統版本32 or 64 設定燒錄 baud

    rate 115200, Flash Size 512KB
  99. SMART.JS FLASHNCHIPS https://github.com/cesanta/smart.js/releases smart.js 的燒錄⼯工具,有 Mac & Win 版 除了

    smart.js 適合以外其實不太⽅方便-_-
  100. WeeESP8266

  101. 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
  102. DOCUMENTATION http://docs.iteadstudio.com/ITEADLIB_Arduino_WeeESP8266/ index.html

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

    IP
  104. 安裝 Arduino > Sketch > manage Libraries.. Search WEEESP8266 >

    install
  105. 練習⼆二 透過 WeeESP8266 連接 AP #include <SoftwareSerial.h> #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"); }
  106. 範例 修改 ESP8266.h 啟⽤用 softwareSerial #define ESP8266_USE_SOFTWARE_SERIAL

  107. 結果

  108. HTTP

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

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

  111. HTTP PROCESS Browser HTTP Server 1. HTTP Request 2. HTTP

    Response http://tw.yahoo.com
  112. HTTP PROTOCOL HyperText Transfer Protocol 超⽂文本傳輸協定 TCP Port 80 透過⽂文字指令,傳輸

    HTML 的協定 (HTML)
  113. HTTP REQUEST GET / HTTP/1.1 Host: www.google.com

  114. 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!
  115. HTTP RESPONSE CODE 200 成功請求 302 重新導向,轉址 404 請求錯誤,找不到網⾴頁 500

    伺服器錯誤
  116. HTTP METHOD GET 取得資料
 POST 提交資料 DELETE 刪除資料 PUT 更新資料

  117. TELNET HTTP

  118. CURL SEE-URL

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

  120. 流程 啟動 MUX 監聽 TCP Port 80 接收到瀏覽器請求(mux id) 回應

    header + HTML 完成關閉連線
  121. 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.
  122. 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"); } }
  123. 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[] = "<h1>Hello ESP8266!!</h1>"; 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"); } } }
  124. 結果 HTTP/1.1 200 OK Content-Length: 24 Server: ESP8266 Content-Type: text/html

    Connection: keep-alive <h1>Hello ESP8266!!</h1>
  125. Web 概念

  126. WEB 組成 前端 渲染畫⾯面 HTML 資料 CSS 畫⾯面 JavaScript UI

    後端 產出 HTML 處理資料庫 Server Browser CSS HTML JavaScript HTTP DB File Sensor…
  127. RESTFUL WEB SERVICE Based on HTTP 每⼀一個 URI 都是⼀一個資源 針對資源進⾏行操作

    查詢(GET)、新增(POST) 修改(PUT)、刪除(DELETE)
  128. 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
  129. HTML <html>
 <head> 設定 </head> <body> 內容 </body> </html>

  130. HTML 內容 <h1>標題</h1> <p>段落</p> <article>⽂文章</article> <section>章節</section>

  131. HTML 表單 <button>按鈕</button> <input type=“text” /> 輸⼊入框 <from action=“/upload” method=“post”>

    表單
  132. IOT Service

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

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

  135. THINGSPEAK The open data platform for the Internet of Things

    https://thingspeak.com/
  136. CHANNEL

  137. NEW CHANNEL

  138. NEW CHANNEL

  139. MY CHANNEL

  140. API KEYS

  141. API KEYS

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

  143. 圖表

  144. ⾃自訂圖表

  145. SPARK FUN a place to push your data

  146. CREATE A DATA STREAM

  147. STREAM

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

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

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

  151. 使⽤用 HTML 送出資料 <form action="http://data.sparkfun.com/input/QGxWK3RzNdslXlnoNddo"> <input type="text" name="private_key" value="JqxmeGadRlta4ajVZzzV" />

    <input type="text" name="sensor"> <input type="submit" value="送出" /> </form> esp8266-workshop/post.html
  152. 使⽤用 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
  153. 使⽤用 AT 送出資料

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

  155. 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 控制數位輸出準位
  156. 線路

  157. 程式 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
  158. 結果 https://thingspeak.com/channels/56216

  159. 注意 我的這塊 Uno 無法讓 esp 順利建⽴立 tcp 連線.. :( 各種變異版本

    arduino LDO 採⽤用不同晶⽚片 AMS1117、AX1117 (供應電流不同)
  160. Arduino ESP8266 「ESP8266的價格就跟那些多到像是⽤用⼤大砲發射後的感應器碎⽚片⼀一樣便宜。」- 布萊恩‧ 傑普森(Brian Jepson)

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

    IDE 開發
  162. 有什麼? • Digital IO • Analog input *1 • Analog

    output • Timing • Serial • Wi-Fi • Ticker • EEPROM • I2C • SPI • ESP-specific APIs
  163. 安裝 http://arduino.esp8266.com/staging/package_esp8266com_index.json

  164. 安裝

  165. 安裝

  166. 安裝

  167. 模組選擇

  168. 功能

  169. 配線

  170. 燒錄

  171. 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
  172. A REST https://github.com/marcoschwartz/aREST 把 Arduino 變成⼀一個 web service 透過 http

    api 讀寫 GPIO
  173. 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);
  174. 練習五 使⽤用 GPIO 透過 aREST 開關 LED 讀取⼟土壤感測器的值

  175. 程式 #include <ESP8266WiFi.h> #include <aREST.h> 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); }
  176. 測試

  177. ADC

  178. 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)
  179. ADC 只能輸⼊入 0 ~1V 需⽤用電阻分壓輸⼊入 3.3v x 10k/22k+10k =1v 燒毀注意

  180. 範例 10K 22K

  181. 耗電

  182. 耗電情況 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
  183. 耗電測試 CP2102 supply current ~20mA CP2102 + ESP8266 = 95mA

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

  185. 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
  186. deep sleep current 22.7m - CP2102 ~= 1mA

  187. I2C LCD

  188. Inter-Integrated Circuit SCL SDA 因為 LCD 吃 5v 所以 I2C

    轉接板 也需供 5v 電喔! 透過 CP2102 輸⼊入 CP2102 5V
  189. LiquidCrystal I2C library

  190. LCD API #include <Wire.h> #include <LiquidCrystal_I2C.h> // 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!”); }
  191. 結果

  192. n = WiFi.scanNetworks() 掃描 Access Point SSID = WiFi.SSID(i) 取得第

    i 個 SSID SSID = WiFi.RSSI(i) 取得第 i 個 RSSI Received Signal Strength Indication 信號強度,越接近零越好 ESP8266 API 掃描 AP
  193. 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
  194. SPIFFS

  195. SPIFFS https://github.com/pellepl/spiffs Wear-leveled SPI flash file system for embedded devices

    把 EEPROM 變成檔案系統 可⽤用於儲存 config 或 log NodeMCU 與 ESP8266/Arduino 皆有
  196. SPIFFS

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

    file.println(input) 寫⼊入
  198. 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'));
  199. 練習七 esp8266-workshop/spiffs 透過 Serial 輸⼊入 SSID 帳號密碼 存在 SPIFFS 重啟後讀出

  200. 再論韌體

  201. 再論韌體 官⽅方 SDK + AT Command 1.0 以後需要 1MB Flash

    ⺫⽬目前韌體⼤大都基於 0.9.5 SDK 開發 只需 512KB Flash AT Command 沒 Open Source
  202. 再論韌體 Arduino/ESP8266 獨樹⼀一格的 Arduino 發展迅速、社群活躍 增加實⽤用的擴充模組(SPIFFS)

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

    API ⽂文件完整
  204. 再論韌體 Smart.js Cesanta 公司發展(商業⽀支援) v7 embedded JavaScript Engine JavaScript 社群完整

    還在 alpha ..
  205. 再論韌體 Sming - Open Source framework for high efficiency native

    ESP8266 development ⾮非 Arduino 的 ESP8266 韌體開發環境, 應⽤用範例多,最豐富的 SDK 範例
  206. NodeMCU

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

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

  209. ESPLORER NODEMCU 也可開發 nodeMCU 喔

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

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

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

  213. 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
  214. WIFI CONNECT 上傳只是透過 Serial Shell 寫⼊入檔案 dofile(“init.lua”)

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

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

  217. 練習⼋八 使⽤用 nodemcu 製作 LCD 留⾔言板 透過 Web API ⽅方式更新留⾔言

    esp8266-workshop/nodemcu/web-guestbook
  218. 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.."<h1>ESP8266 Web Server</h1>"; client:send(buf); client:close(); collectgarbage(); end) end)
  219. WEB SERVER PARSE HEADER http://www.regexr.com/

  220. 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.."<h1>ESP8266 Web Server</h1>"; client:send(buf); client:close(); collectgarbage(); end) end)
  221. WEB SERVER

  222. Smart.js

  223. 動⼿手玩玩看~

  224. 希望⼤大家都有收穫:O

  225. 開始動⼿手吧!

  226. 參考資料 • 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/