Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
電子工作のためのPython
MicroPython on the ESP8266
2016年11月12日
PyCon mini Hiroshima 2016 + IoTLT広島
西本卓也 @24motz / nishimotz@gmail.c...
光線銃ゲーム!
• 銃(ライト)を当てて開始
• チャンスは5回
• カウントダウン(5〜10秒)
• 敵がきた!
• 音:ピーピーピー
• 体をそらして、銃を撃って
• 補給カプセルが届いた!
• 音:プー
• 体を近づけて、銃を撃たないで
...
軽量スクリプト言語
• NodeMcu (eLua + node.jsの影響)
• mruby/c (ruby on PSoC5)
• IchigoJam (低価格BASICパソコン)
• MicroPython (Python3を軽量化)
3
むかしのPC、いまのマイコン
4
• NEC TK-80 (1976年) 8bit 2MHz
• NEC PC-9801RA (1989年) 32bit 16MHz
• Arduino (2005年-) 8bit 16MHz
• PCとマイコン...
PythonでPCからマイコンまで
• iPhone / iPad
• Pythonista for iOS
• PC / サーバー / データサイエンス / Deep Learning
• Windows, Mac, Linux
5
Google Cloud Vision API
6
Raspberry Pi
• 教育用コンピューター
• 2012年 英国の非営利組織
• 2016年9月 1000万台突破
• Linux (Raspbian) → Scratch, Mathematica, Python
7
超音波距離センサー
• 出した音が反射して返るまでの時間
• 音の速さをかけて2で割ると距離
8
️
Pythonで汎用入出力
9
import time, RPi.GPIO as GPIO
GPIO.setup(TRIG,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)
GPIO.output(TRIG, GPIO.HIG...
スマートフォンの技術
10
• Raspberry Pi 3 Model B
• 1.2GHz 64-bit 4core ARMv8 CPU (Broadcom)
• 1GB RAM
• MicroSD スロット
• WiFi / Blueto...
フィジカルコンピューティング
11
• Arduino
• ワンボードマイコン
• 2005年 イタリア 教育現場から
• オープン
• 互換機
• 拡張シールド
• 無料の開発環境
• Windows/Mac対応
• C++風のプログラミング...
Arduino Uno
• CPU: AVR ATmega328P
• むかしのPCの性能
• フラッシュメモリ: 32KB
• 1GB(RasPi3)の約32分の1
• クロック周波数: 16MHz
• 1.2GHz(RasPi3)の約75分...
Espressif ESP8266
13
• 中国製 低価格 WiFi モジュール
• マイコンに通信機能を
• Arduinoに接続
• シリアル接続 + AT コマンド
• 中身が解析された
• Arduino Uno より高性能(80MH...
ESP-WROOM-02
• 日本の工事設計認証(技適)取得
14
ESPr Developer
(ESP-WROOM-02
開発ボード)
ESPr One
(Arduino Uno同一形状
ESP-WROOM-02開発ボード)
ESP-WRO...
ESP-WROOM-02開発ボードを
Arduino IDEで開発する方法
15
ESPr Oneの青いLEDを点滅
16
void setup() {
pinMode(14,OUTPUT);
digitalWrite(14,HIGH);
delay(1000);
digitalWrite(14,LOW);
delay(10...
Arduino IDEとPython
• Arduino IDE
• 書き換えるたびにコンパイルして転送
• WiFi にたどり着くまでが長そう
• Python
• 入力してすぐに実行
• REPL : Read-Eval-Print Loo...
MicroPython by Damien George
18https://www.youtube.com/watch?v=EvGhPmPPzko
MicroPythonの動く環境
19
2013年 PyBoard 2016年 ESP8266
STM32F4DISCOVERY (ARM Cortex-M4)
GitHub で公開
Unix 移植版
各種マイコンへの移植
走る無線ルーター
(...
esptoolによるインストール
https://micropython.org/download/
→ esp8266-20161017-v1.8.5.bin
$ sudo python2 -m pip install esptool
$ e...
シリアル接続(ターミナル)
$ sudo port install picocom
$ picocom --baud 115200 /dev/cu.usbserial-DN01J32J
Ctrl-A Ctrl-Z で終了
$ screen /d...
Hello MicroPython
Terminal ready
>>> print('Hello MicroPython')
Hello MicroPython
22
ペーストモード Ctrl-E / Ctrl-D
import machine
pin14 = machine.Pin(14, machine.Pin.OUT)
pin14.value(1)
paste mode; Ctrl-C to cance...
ペーストモードでない場合
>>> if True:
... print('hello')
...
hello
>>>
CPython の対話モードとは違う挙動
ipython とだいたい同じ
24
ブロックで自動的にインデント
Backspac...
コード補完と履歴
>>> p
[tab]
>>> pin14
. [tab]
>>> pin14.
init value low high
irq IN OUT OPEN_DRAIN
PULL_UP IRQ_RISING IRQ_FALLING...
WiFi APを有効化
import network
sta_if = network.WLAN(network.STA_IF) # station
sta_if.active(False)
ap_if = network.WLAN(netwo...
APにMacをつないでみる
SSID : MicroPython-xxxxxx Password : micropythoN
$ ping 192.168.4.1
PING 192.168.4.1 (192.168.4.1): 56 data ...
ESP8266のSTAとAP
• 同時に使えるがMacからはESP8266だけ見える
2828
インター
ネット
ESP8266
Mac無線
ルーター
APSTA
STAだけを有効化
2929
インター
ネット
ESP8266
Mac
無線
ルーター
APSTA
サーバー
30
def server():
ブラウザから確認
31
>>> server()
listening on ('0.0.0.0', 80)
client connected from ('192.168.4.2', 60403)
Ctrl-Cで停止
Traceback (mo...
独自のファイルシステム
>>> import os
>>> os.
__name__ uname urandom dupterm
dupterm_notify VfsFat listdir mkdir
rmdir chdir getcwd re...
WebREPL
• webrepl.html を入手してブラウザで実行
• ファイルのアップロード、ダウンロード
33
まとめ : MicroPython & ESPr One
• 言語としては同じPython
• デジタル入出力のデバイスを扱うライブラリ
• ターミナル、エディタ、ブラウザで開発
• 開発にも運用にも役立つWiFi
• ESPr One
• M...
Upcoming SlideShare
Loading in …5
×

電子工作のためのPython

951 views

Published on

2016年11月12日
PyCon mini Hiroshima 2016 + IoTLT広島

Published in: Technology
  • Be the first to comment

  • Be the first to like this

電子工作のためのPython

  1. 1. 電子工作のためのPython MicroPython on the ESP8266 2016年11月12日 PyCon mini Hiroshima 2016 + IoTLT広島 西本卓也 @24motz / nishimotz@gmail.com 1
  2. 2. 光線銃ゲーム! • 銃(ライト)を当てて開始 • チャンスは5回 • カウントダウン(5〜10秒) • 敵がきた! • 音:ピーピーピー • 体をそらして、銃を撃って • 補給カプセルが届いた! • 音:プー • 体を近づけて、銃を撃たないで • https://github.com/nishimotz/micropython_demo 2 ESPr One (ESP-WROOM-02) 温度センサー 明るさセンサー 超音波距離センサー 圧電ブザー 白黒モニター(128x64)
  3. 3. 軽量スクリプト言語 • NodeMcu (eLua + node.jsの影響) • mruby/c (ruby on PSoC5) • IchigoJam (低価格BASICパソコン) • MicroPython (Python3を軽量化) 3
  4. 4. むかしのPC、いまのマイコン 4 • NEC TK-80 (1976年) 8bit 2MHz • NEC PC-9801RA (1989年) 32bit 16MHz • Arduino (2005年-) 8bit 16MHz • PCとマイコン : 経験の拡大 • 適材適所、違い、本質
  5. 5. PythonでPCからマイコンまで • iPhone / iPad • Pythonista for iOS • PC / サーバー / データサイエンス / Deep Learning • Windows, Mac, Linux 5
  6. 6. Google Cloud Vision API 6
  7. 7. Raspberry Pi • 教育用コンピューター • 2012年 英国の非営利組織 • 2016年9月 1000万台突破 • Linux (Raspbian) → Scratch, Mathematica, Python 7
  8. 8. 超音波距離センサー • 出した音が反射して返るまでの時間 • 音の速さをかけて2で割ると距離 8 ️
  9. 9. Pythonで汎用入出力 9 import time, RPi.GPIO as GPIO GPIO.setup(TRIG,GPIO.OUT) GPIO.setup(ECHO,GPIO.IN) GPIO.output(TRIG, GPIO.HIGH) time.sleep(0.00001) GPIO.output(TRIG, GPIO.LOW) while GPIO.input(ECHO) == GPIO.LOW: off_time = time.time() while GPIO.input(ECHO) == GPIO.HIGH: on_time = time.time()
  10. 10. スマートフォンの技術 10 • Raspberry Pi 3 Model B • 1.2GHz 64-bit 4core ARMv8 CPU (Broadcom) • 1GB RAM • MicroSD スロット • WiFi / Bluetooth / Ethernet • HDMI / USB / Audio • GPIO • DSI • ソフトウェア開発 • PCやサーバーと同じ
  11. 11. フィジカルコンピューティング 11 • Arduino • ワンボードマイコン • 2005年 イタリア 教育現場から • オープン • 互換機 • 拡張シールド • 無料の開発環境 • Windows/Mac対応 • C++風のプログラミング言語 • PCとUSBで接続できる
  12. 12. Arduino Uno • CPU: AVR ATmega328P • むかしのPCの性能 • フラッシュメモリ: 32KB • 1GB(RasPi3)の約32分の1 • クロック周波数: 16MHz • 1.2GHz(RasPi3)の約75分の1 • 消費電力は少ない • 電池寿命、熱対策など有利 • スイッチオンで書き込んだプログラムだけ「走る」 • 特別なプログラミング環境 • ネットワーク機能の不足 12
  13. 13. Espressif ESP8266 13 • 中国製 低価格 WiFi モジュール • マイコンに通信機能を • Arduinoに接続 • シリアル接続 + AT コマンド • 中身が解析された • Arduino Uno より高性能(80MHz) • gccでソフトウェアが開発可能 • オープンソースSDK • 公式SDK • ESP8266自身がArduino IDEの対象に
  14. 14. ESP-WROOM-02 • 日本の工事設計認証(技適)取得 14 ESPr Developer (ESP-WROOM-02 開発ボード) ESPr One (Arduino Uno同一形状 ESP-WROOM-02開発ボード) ESP-WROOM-02 USBシリアル変換、MicroUSB、電源回路 ユーザースイッチ、ユーザーLED
  15. 15. ESP-WROOM-02開発ボードを Arduino IDEで開発する方法 15
  16. 16. ESPr Oneの青いLEDを点滅 16 void setup() { pinMode(14,OUTPUT); digitalWrite(14,HIGH); delay(1000); digitalWrite(14,LOW); delay(1000); digitalWrite(14,HIGH); delay(1000); digitalWrite(14,LOW); } void loop() { } • PCからMicroUSBで電源と通信 • GPIO14が青いLED • Reset Method = nodemcu 書込モード切替不要
  17. 17. Arduino IDEとPython • Arduino IDE • 書き換えるたびにコンパイルして転送 • WiFi にたどり着くまでが長そう • Python • 入力してすぐに実行 • REPL : Read-Eval-Print Loop • ソースをコピーして実行 • 従来のPython • 少ないメモリと遅いCPUでは動かない • OSが必要(Raspberry Pi はLinuxが動作) 17
  18. 18. MicroPython by Damien George 18https://www.youtube.com/watch?v=EvGhPmPPzko
  19. 19. MicroPythonの動く環境 19 2013年 PyBoard 2016年 ESP8266 STM32F4DISCOVERY (ARM Cortex-M4) GitHub で公開 Unix 移植版 各種マイコンへの移植 走る無線ルーター (PyCon JP 2016 LT)
  20. 20. esptoolによるインストール https://micropython.org/download/ → esp8266-20161017-v1.8.5.bin $ sudo python2 -m pip install esptool $ esptool.py -p /dev/cu.usbserial-DN01J32J --baud 460800 write_flash --flash_size=8m 0 esp8266-20161017-v1.8.5.bin Mac or Linux (Raspberry Pi) 20
  21. 21. シリアル接続(ターミナル) $ sudo port install picocom $ picocom --baud 115200 /dev/cu.usbserial-DN01J32J Ctrl-A Ctrl-Z で終了 $ screen /dev/cu.usbserial-DN01J32J 115200 Windows は TeraTerm など 21
  22. 22. Hello MicroPython Terminal ready >>> print('Hello MicroPython') Hello MicroPython 22
  23. 23. ペーストモード Ctrl-E / Ctrl-D import machine pin14 = machine.Pin(14, machine.Pin.OUT) pin14.value(1) paste mode; Ctrl-C to cancel, Ctrl-D to finish === import machine === pin14 = machine.Pin(14, machine.Pin.OUT) === pin14.value(1) === >>> 23 Copy Paste Ctrl+D Ctrl+E
  24. 24. ペーストモードでない場合 >>> if True: ... print('hello') ... hello >>> CPython の対話モードとは違う挙動 ipython とだいたい同じ 24 ブロックで自動的にインデント Backspace Enter でブロック終了
  25. 25. コード補完と履歴 >>> p [tab] >>> pin14 . [tab] >>> pin14. init value low high irq IN OUT OPEN_DRAIN PULL_UP IRQ_RISING IRQ_FALLING >>> pin14.low() >>> pin14.high() → 上矢印キーで pin14.low() 呼び出し 25
  26. 26. WiFi APを有効化 import network sta_if = network.WLAN(network.STA_IF) # station sta_if.active(False) ap_if = network.WLAN(network.AP_IF) # access point ap_if.active(True) ap_if.ifconfig() ('192.168.4.1', '255.255.255.0', '192.168.4.1', '192.168.1.1') 26
  27. 27. APにMacをつないでみる SSID : MicroPython-xxxxxx Password : micropythoN $ ping 192.168.4.1 PING 192.168.4.1 (192.168.4.1): 56 data bytes 64 bytes from 192.168.4.1: icmp_seq=0 ttl=255 time=0.872 ms 64 bytes from 192.168.4.1: icmp_seq=1 ttl=255 time=117.740 ms 27 ESP8266 Mac 無線 ルーター APSTA
  28. 28. ESP8266のSTAとAP • 同時に使えるがMacからはESP8266だけ見える 2828 インター ネット ESP8266 Mac無線 ルーター APSTA
  29. 29. STAだけを有効化 2929 インター ネット ESP8266 Mac 無線 ルーター APSTA サーバー
  30. 30. 30 def server():
  31. 31. ブラウザから確認 31 >>> server() listening on ('0.0.0.0', 80) client connected from ('192.168.4.2', 60403) Ctrl-Cで停止 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 9, in server KeyboardInterrupt:
  32. 32. 独自のファイルシステム >>> import os >>> os. __name__ uname urandom dupterm dupterm_notify VfsFat listdir mkdir rmdir chdir getcwd remove rename stat statvfs umount >>> os.listdir() ['boot.py', 'port_config.py', 'led.py', 'httpd.py', 'ssd1306.py'] 32 boot.py と main.py は起動時に実行
  33. 33. WebREPL • webrepl.html を入手してブラウザで実行 • ファイルのアップロード、ダウンロード 33
  34. 34. まとめ : MicroPython & ESPr One • 言語としては同じPython • デジタル入出力のデバイスを扱うライブラリ • ターミナル、エディタ、ブラウザで開発 • 開発にも運用にも役立つWiFi • ESPr One • MicroUSBケーブル、モバイルバッテリーがあれば • LED点滅(Lチカ)→パーツで拡張 • ブレッドボードでプロトタイピング • Pythonの始め方のひとつに 34

×