2018年6月18日 星期一
Micropython on ESP8266 (windows)
前幾天看到有人介紹 MicroPython on esp8266,於是翻找出2015年時買的 NodeMCU WiFi板來試看看
Micro python 介紹 http://docs.micropython.org/en/latest/esp8266/index.html
以下包含:
Windows環境中安裝 micropython 到 esp8266
設定 repl
連接 OLED (使用SPI 介面)
I2C 請參考 https://medium.com/@rovai/micropython-on-esp-using-jupyter-6f366ff5ed9
顯示文字到 OLED
1. 安裝 esptool
命令提示字元下輸入
pip install esptool
安裝完後,建議將 C:\Python36-32\Lib\site-packages\ 下的 esptool.py 拷貝到其他目錄
e.g: d:\esp8266\
2. 接上裝置,查看電腦偵測到的串列通訊連接埠(com)是多少
清除flash
python esptool.py --port com3 --baud 19200 erase_flash
下載image ( http://micropython.org/download#esp8266 )
下面用 esp8266-20180511-v1.9.4.bin 舉例
python esptool.py --port com3 --baud 460800 write_flash --flash_size=detect 0 esp8266-20180511-v1.9.4.bin
3.開啟 putty (或其他可用com串列通訊的程式)
使用 115200 bps 通訊速度
按 [Enter] 後可以看到提示字元
4. 設定 webrepl (可以使用網頁方式操作repl)
先設定後可以使用網頁方式連線 webrepl
在TTY 下設定使用 webrepl
import webrepl_setup
reboot後,要重新插拔裝置,再連線
5. 設定 WiFi 連區網
TTY中按 Ctrl + E 可以用黏貼模式直接貼一整段 code,貼完後按 Ctrl + D 結束
import network
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect("SSID", "PASSWORD")
print(sta_if.ifconfig())
import webrepl
webrepl.start()
SSID, PASSWORD 請自行換成所用的區網訊息
按 Ctrl + D 後會執行剛才輸入的程式,如下:(IP會有所不同,看區網設定)
預設會打開 AP mode (192.168.4.1)
可以搜尋 wifi 訊號,找到 MicroPython-xxxxxx (每個裝置會有不同的號碼)
或使用前面資料開啟的 STA mode
6. 使用webrepl 連線
http://micropython.org/webrepl/
如果是連線到esp8266 的AP,可以直接按 Connect 做連線
若是連到自己的區網,後面網址需修改為步驟 5 時得到的 IP
WebREPL連線時,會要求 步驟4 設定的密碼
(上面是連線後按了多次 [Enter])
7. 下載 boot.py 程式做修改
網頁 WebREPL 畫面的最右邊或最下方,有操作介面
可以 直接上傳本機電腦中檔案 或 下載ESP8266中的檔案
下載 boot.py
注意:瀏覽器可能會警告下載 .py 類型的檔案
8. 修改 boot.py 檔案後再上傳
將網路設定寫到 boot.py 中,這樣之後 reboot ,就能直接用 webrepl 連線
9. 下載 OLED driver
可以在 https://github.com/micropython/micropython 下載驅動
以下將使用 https://github.com/micropython/micropython/blob/master/drivers/display/ssd1306.py
透過 網頁 WebREPL 將 ssd1306.py 下載到 ESP8266 中
10. 連接 OLED with SPI
(2014買的OLED,板子預設是使用 SPI 介面)
11. 寫 OLED init 程式
from machine import SPI
from machine import Pin
import ssd1306
dc_pin = Pin(5, Pin.OUT)
cs_pin = Pin(15, Pin.OUT)
res_pin = Pin(4, Pin.OUT)
spi = SPI(baudrate = 100000, sck=Pin(14), mosi=Pin(13), miso=Pin(12))
#class SSD1306_SPI(self, width, height, spi, dc, res, cs, external_vcc=False):
oled = ssd1306.SSD1306_SPI(128, 64, spi, Pin(5), Pin(4), Pin(15))
oled.init_display()
oled.fill(0)
oled.text('test', 0 ,0)
oled.show()
將程式命名後上傳到 ESP8266 中,即可使用 import XXXX.py 後執行
12. 後記
SPI 挺浪費有限的 GPIO,現今買的 OLED 預設多為 I2C 介面,只需兩隻接腳。
可以將連線的 IP 顯示在 OLED 上,就可以都用 WiFi 做連線控制。
網路上有神人做 WiFi 跑 MQTT;可以一對多控制,需要再花時間研究。
還沒測試 IRQ,這個應該是單晶片機上比較需要的功能。
P.S:
1. 注意 .py程式的縮排,不支援 TAB,需使用 SPACE.
2. 原先 NodeMCU系統重新配置的 IO 腳位是印在電路板上,在 MicroPython 使用的是晶片原始的 GPIO,要參考原始的配置,而不是看電路板上標明的值。
3. https://forum.micropython.org/viewtopic.php?t=2440
RTC的使用方法
import ntptime
rtc = machine.RTC()
ntptime.settime() # update time form internet
print(str(rtc.datetime())
#Timer 使用參考 https://www.dfrobot.com/blog-606.html
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言