Mais conteúdo relacionado Semelhante a 電子工作のためのPython (20) Mais de Takuya Nishimoto (20) 電子工作のためのPython 2. 光線銃ゲーム!
• 銃(ライト)を当てて開始
• チャンスは5回
• カウントダウン(5〜10秒)
• 敵がきた!
• 音:ピーピーピー
• 体をそらして、銃を撃って
• 補給カプセルが届いた!
• 音:プー
• 体を近づけて、銃を撃たないで
• https://github.com/nishimotz/micropython_demo
2
ESPr One (ESP-WROOM-02)
温度センサー
明るさセンサー
超音波距離センサー
圧電ブザー
白黒モニター(128x64)
3. 軽量スクリプト言語
• NodeMcu (eLua + node.jsの影響)
• mruby/c (ruby on PSoC5)
• IchigoJam (低価格BASICパソコン)
• MicroPython (Python3を軽量化)
3
4. むかしのPC、いまのマイコン
4
• NEC TK-80 (1976年) 8bit 2MHz
• NEC PC-9801RA (1989年) 32bit 16MHz
• Arduino (2005年-) 8bit 16MHz
• PCとマイコン : 経験の拡大
• 適材適所、違い、本質
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
• 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やサーバーと同じ
12. Arduino Uno
• CPU: AVR ATmega328P
• むかしのPCの性能
• フラッシュメモリ: 32KB
• 1GB(RasPi3)の約32分の1
• クロック周波数: 16MHz
• 1.2GHz(RasPi3)の約75分の1
• 消費電力は少ない
• 電池寿命、熱対策など有利
• スイッチオンで書き込んだプログラムだけ「走る」
• 特別なプログラミング環境
• ネットワーク機能の不足
12
13. Espressif ESP8266
13
• 中国製 低価格 WiFi モジュール
• マイコンに通信機能を
• Arduinoに接続
• シリアル接続 + AT コマンド
• 中身が解析された
• Arduino Uno より高性能(80MHz)
• gccでソフトウェアが開発可能
• オープンソースSDK
• 公式SDK
• ESP8266自身がArduino IDEの対象に
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. Arduino IDEとPython
• Arduino IDE
• 書き換えるたびにコンパイルして転送
• WiFi にたどり着くまでが長そう
• Python
• 入力してすぐに実行
• REPL : Read-Eval-Print Loop
• ソースをコピーして実行
• 従来のPython
• 少ないメモリと遅いCPUでは動かない
• OSが必要(Raspberry Pi はLinuxが動作)
17
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
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
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. 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. 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
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. 独自のファイルシステム
>>> 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 は起動時に実行
34. まとめ : MicroPython & ESPr One
• 言語としては同じPython
• デジタル入出力のデバイスを扱うライブラリ
• ターミナル、エディタ、ブラウザで開発
• 開発にも運用にも役立つWiFi
• ESPr One
• MicroUSBケーブル、モバイルバッテリーがあれば
• LED点滅(Lチカ)→パーツで拡張
• ブレッドボードでプロトタイピング
• Pythonの始め方のひとつに
34
Notas do Editor https://www.flickr.com/photos/htomari/8861196881 https://cloudplatform.googleblog.com/2015/12/Google-Cloud-Vision-API-changes-the-way-applications-understand-images.html
http://qiita.com/kazunori279/items/768c7fdf96cdf45a9d16
https://twitter.com/24motz/status/727730908766318593
https://gist.github.com/nishimotz/375b9859e0f62c0b0b7d2e4d863a9f8b http://jp.rs-online.com/web/p/products/1238760/ http://trac.switch-science.com/wiki/esp_dev_arduino_ide GOTO 2016 • MicroPython & the Internet of Things • Damien George
https://www.youtube.com/watch?v=cyhFFm3yh14 === 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)