SlideShare a Scribd company logo
電子工作のためのPython
MicroPython on the ESP8266
2016年11月12日
PyCon mini Hiroshima 2016 + IoTLT広島
西本卓也 @24motz / nishimotz@gmail.com
1
光線銃ゲーム!
• 銃(ライト)を当てて開始
• チャンスは5回
• カウントダウン(5〜10秒)
• 敵がきた!
• 音:ピーピーピー
• 体をそらして、銃を撃って
• 補給カプセルが届いた!
• 音:プー
• 体を近づけて、銃を撃たないで
• https://github.com/nishimotz/micropython_demo
2
ESPr One (ESP-WROOM-02)
温度センサー
明るさセンサー
超音波距離センサー
圧電ブザー
白黒モニター(128x64)
軽量スクリプト言語
• 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.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
• 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
• Arduino
• ワンボードマイコン
• 2005年 イタリア 教育現場から
• オープン
• 互換機
• 拡張シールド
• 無料の開発環境
• Windows/Mac対応
• C++風のプログラミング言語
• PCとUSBで接続できる
Arduino Uno
• CPU: AVR ATmega328P
• むかしのPCの性能
• フラッシュメモリ: 32KB
• 1GB(RasPi3)の約32分の1
• クロック周波数: 16MHz
• 1.2GHz(RasPi3)の約75分の1
• 消費電力は少ない
• 電池寿命、熱対策など有利
• スイッチオンで書き込んだプログラムだけ「走る」
• 特別なプログラミング環境
• ネットワーク機能の不足
12
Espressif ESP8266
13
• 中国製 低価格 WiFi モジュール
• マイコンに通信機能を
• Arduinoに接続
• シリアル接続 + AT コマンド
• 中身が解析された
• Arduino Uno より高性能(80MHz)
• gccでソフトウェアが開発可能
• オープンソースSDK
• 公式SDK
• ESP8266自身がArduino IDEの対象に
ESP-WROOM-02
• 日本の工事設計認証(技適)取得
14
ESPr Developer
(ESP-WROOM-02
開発ボード)
ESPr One
(Arduino Uno同一形状
ESP-WROOM-02開発ボード)
ESP-WROOM-02
USBシリアル変換、MicroUSB、電源回路
ユーザースイッチ、ユーザーLED
ESP-WROOM-02開発ボードを
Arduino IDEで開発する方法
15
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 書込モード切替不要
Arduino IDEとPython
• Arduino IDE
• 書き換えるたびにコンパイルして転送
• WiFi にたどり着くまでが長そう
• Python
• 入力してすぐに実行
• REPL : Read-Eval-Print Loop
• ソースをコピーして実行
• 従来のPython
• 少ないメモリと遅いCPUでは動かない
• OSが必要(Raspberry Pi はLinuxが動作)
17
MicroPython by Damien George
18https://www.youtube.com/watch?v=EvGhPmPPzko
MicroPythonの動く環境
19
2013年 PyBoard 2016年 ESP8266
STM32F4DISCOVERY (ARM Cortex-M4)
GitHub で公開
Unix 移植版
各種マイコンへの移植
走る無線ルーター
(PyCon JP 2016 LT)
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
シリアル接続(ターミナル)
$ sudo port install picocom
$ picocom --baud 115200 /dev/cu.usbserial-DN01J32J
Ctrl-A Ctrl-Z で終了
$ screen /dev/cu.usbserial-DN01J32J 115200
Windows は TeraTerm など
21
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 cancel, Ctrl-D to finish
=== import machine
=== pin14 = machine.Pin(14, machine.Pin.OUT)
=== pin14.value(1)
===
>>>
23
Copy
Paste
Ctrl+D
Ctrl+E
ペーストモードでない場合
>>> if True:
... print('hello')
...
hello
>>>
CPython の対話モードとは違う挙動
ipython とだいたい同じ
24
ブロックで自動的にインデント
Backspace Enter でブロック終了
コード補完と履歴
>>> 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
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
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
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 (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 9, in server
KeyboardInterrupt:
独自のファイルシステム
>>> 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 は起動時に実行
WebREPL
• webrepl.html を入手してブラウザで実行
• ファイルのアップロード、ダウンロード
33
まとめ : MicroPython & ESPr One
• 言語としては同じPython
• デジタル入出力のデバイスを扱うライブラリ
• ターミナル、エディタ、ブラウザで開発
• 開発にも運用にも役立つWiFi
• ESPr One
• MicroUSBケーブル、モバイルバッテリーがあれば
• LED点滅(Lチカ)→パーツで拡張
• ブレッドボードでプロトタイピング
• Pythonの始め方のひとつに
34

More Related Content

PPTX
MicroPython + ESP32
PPTX
210911 これから始める電子工作とMicroPython
PPTX
171116 nishimoto-mruby
PPTX
Nishimoto 170603-mruby
PDF
monoでWindowsアプリを動かす
PDF
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
PDF
Raspberry Pi + Go で IoT した話
PDF
Bug for Install Linux on Atom Z8700 Portabook ポータブックのLinuxインストールバグ対策 2018 #東海道らぐ
MicroPython + ESP32
210911 これから始める電子工作とMicroPython
171116 nishimoto-mruby
Nishimoto 170603-mruby
monoでWindowsアプリを動かす
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
Raspberry Pi + Go で IoT した話
Bug for Install Linux on Atom Z8700 Portabook ポータブックのLinuxインストールバグ対策 2018 #東海道らぐ

What's hot (20)

PDF
小ネタ:Android上でroscoreを走らせてみた
PDF
最近の事と #NT金沢 2018に初出展してきた
PPTX
レベルを上げて物理で殴る 16x9
PPTX
RgGen ご紹介
PPTX
Rosjp37 live ros
PDF
Recently Mobile Linux Hacking after Kernel4.16RC 最近のKernel4.16RC以降の ガジェットLin...
PDF
Introduction Pycon2010
PDF
PYNQ祭りLT todotani
PPTX
Ren’pyの御紹介
PPTX
M5StackをRustで動かす
PDF
Raspberry Piにdiskless modeのalpine linuxを導入してみる
PDF
LattePandaの紹介
PDF
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい2
PDF
197x Timer with Your Messages
PPTX
Gstreamer Basics
PDF
Rust で RTOS を考える
KEY
mikutter入門
PPTX
Tfug kansai vol3
PDF
Beginner for Power Control on Linux はじめてのLinuxバッテリー省エネ設定
PDF
78tch
小ネタ:Android上でroscoreを走らせてみた
最近の事と #NT金沢 2018に初出展してきた
レベルを上げて物理で殴る 16x9
RgGen ご紹介
Rosjp37 live ros
Recently Mobile Linux Hacking after Kernel4.16RC 最近のKernel4.16RC以降の ガジェットLin...
Introduction Pycon2010
PYNQ祭りLT todotani
Ren’pyの御紹介
M5StackをRustで動かす
Raspberry Piにdiskless modeのalpine linuxを導入してみる
LattePandaの紹介
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい2
197x Timer with Your Messages
Gstreamer Basics
Rust で RTOS を考える
mikutter入門
Tfug kansai vol3
Beginner for Power Control on Linux はじめてのLinuxバッテリー省エネ設定
78tch
Ad

Similar to 電子工作のためのPython (20)

PPTX
210728 mpy
PDF
micropythonで遊んでみる
PPTX
171209 nishimoto-mpy-esp32
PDF
micropythonってたーのしー!
PPTX
天気予報ガジェットを作りな がら、Pythonを勉強しよう
PDF
ハードウェアを用いてPythonを学ぶ
PPT
Raspberry Jam #1 20121229
PDF
I2CでRaspberry Piから 複数の周辺機器を制御する
PPTX
Arduinoを用いたキソ電子工作
PPTX
Polyphony の行く末(2018/3/3)
PDF
Python physicalcomputing
PDF
OSC Tokyo 2013 Spring JRPUG
PDF
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
PDF
ラズベリー・パイでプログラミングと電子工作を体験してみよう
PDF
RPi電子工作入門
KEY
PyOpenCLによるGPGPU入門
PPTX
ロボットシステム学2015年第7回
PDF
20191113 python raspberry_pi_gpio
PDF
ぼちぼちぼっち開発 With raspberry pi アイデアソン 20141019
PDF
Pirtunit slideshare
210728 mpy
micropythonで遊んでみる
171209 nishimoto-mpy-esp32
micropythonってたーのしー!
天気予報ガジェットを作りな がら、Pythonを勉強しよう
ハードウェアを用いてPythonを学ぶ
Raspberry Jam #1 20121229
I2CでRaspberry Piから 複数の周辺機器を制御する
Arduinoを用いたキソ電子工作
Polyphony の行く末(2018/3/3)
Python physicalcomputing
OSC Tokyo 2013 Spring JRPUG
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
ラズベリー・パイでプログラミングと電子工作を体験してみよう
RPi電子工作入門
PyOpenCLによるGPGPU入門
ロボットシステム学2015年第7回
20191113 python raspberry_pi_gpio
ぼちぼちぼっち開発 With raspberry pi アイデアソン 20141019
Pirtunit slideshare
Ad

More from Takuya Nishimoto (20)

PPTX
221217 SwiftはPythonに似ている
PPTX
220427-pydata 統計・データ分析 特集
PPTX
220126 python-datalake-spark
PPTX
211120 他人の書いたPythonスクリプトをステップ実行で理解する
PPTX
211020 すごい広島 with OSH 2021.10
PPTX
210917 オープンセミナー@広島のこれまでとこれから
PPTX
210630 python
PPTX
210526 Power Automate Desktop Python
PPTX
210428 python
PPTX
200918 hannari-python
PPTX
200429 python
PPTX
200325 flask
PPTX
200208 osh-nishimoto-v2
PPTX
191208 python-kansai-nishimoto
PPTX
191101 nvda-sightworld-nishimoto
PPTX
191114 iotlt-nishimoto
PPTX
191030 anna-with-python
PPTX
190916 nishimoto-nvda-pyconjp
PPTX
190925 python-windows
PPTX
190731 chalice
221217 SwiftはPythonに似ている
220427-pydata 統計・データ分析 特集
220126 python-datalake-spark
211120 他人の書いたPythonスクリプトをステップ実行で理解する
211020 すごい広島 with OSH 2021.10
210917 オープンセミナー@広島のこれまでとこれから
210630 python
210526 Power Automate Desktop Python
210428 python
200918 hannari-python
200429 python
200325 flask
200208 osh-nishimoto-v2
191208 python-kansai-nishimoto
191101 nvda-sightworld-nishimoto
191114 iotlt-nishimoto
191030 anna-with-python
190916 nishimoto-nvda-pyconjp
190925 python-windows
190731 chalice

電子工作のためのPython

Editor's Notes

  • #5: https://www.flickr.com/photos/htomari/8861196881
  • #7: https://cloudplatform.googleblog.com/2015/12/Google-Cloud-Vision-API-changes-the-way-applications-understand-images.html http://qiita.com/kazunori279/items/768c7fdf96cdf45a9d16
  • #10: https://twitter.com/24motz/status/727730908766318593 https://gist.github.com/nishimotz/375b9859e0f62c0b0b7d2e4d863a9f8b
  • #11: http://jp.rs-online.com/web/p/products/1238760/
  • #16: http://trac.switch-science.com/wiki/esp_dev_arduino_ide
  • #19: GOTO 2016 • MicroPython & the Internet of Things • Damien George
  • #20: https://www.youtube.com/watch?v=cyhFFm3yh14
  • #31: === def server(): === import socket === addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] === s = socket.socket() === s.bind(addr) === s.listen(1) === print('listening on', addr) === while True: === cl, addr = s.accept() === print('client connected from', addr) === cl_file = cl.makefile('rwb', 0) === while True: === line = cl_file.readline() === if not line or line == b'\r\n': === break === cl.send("""<!DOCTYPE html><html> <head> <title>ESP8266</title> </head> <body> === <h1>ESP8266</h1> === </body></html>""") === cl.close() === >>> server() listening on ('0.0.0.0', 80)