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.

MicroPython に手出してみないか?

324 views

Published on

でじぽろ #13 LT での MicroPython 紹介資料

Published in: Technology
  • Be the first to comment

  • Be the first to like this

MicroPython に手出してみないか?

  1. 1. MicroPythonに 手出してみないか? でじぽろ #13
  2. 2. 自己紹介 札幌駅北口前のとあるソフトウェア会社のソ フトウェアエンジニア 昨年から業務でPython使い出す Python Boot Camp in 札幌に参加 PyCon mini hiroshima のスライド眺めていて 、MicroPythonネタにはまりこむ
  3. 3. MicroPython マイコン用に再実装したPython、OS要らず CPythonよりも小さく、効率がよい 言語としてはPython3.4とほぼ互換 軽量pythonとして組込みLinux上でも使われ ていたりする(OpenWrtなど)
  4. 4. https://micropython.org/
  5. 5. Lチカ from machine import Pin from time import sleep_ms led = Pin(0, Pin.OUT) while True: led.value(1) sleep_ms(500) led.value(0) sleep_ms(500)
  6. 6. 鮨を廻す from machine import * from ssd1306 import * import time class RollingSushi: icon = [ [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,1,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0], [0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0], [0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0], [0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0], [0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0], [0,0,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0], [0,0,0,1,1,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0], [0,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0], [0,0,0,1,1,0,1,1,1,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,0,0], [0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,0,0], [0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,0,0,1,1,0,0,0,1,1,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], ] def __init__(self): self.i2c = I2C(sda=Pin(25),scl=Pin(26)) self.lcd = SSD1306_I2C(128, 64, self.i2c) self.x0 = 0 self.y0 = 0 self.xlen = len(RollingSushi.icon[0]) self.ylen = len(RollingSushi.icon) self.xmax = 128 - self.xlen self.ymax = 64 - self.ylen self.direction = 0 self.lcd.init_display() self.lcd.show()
  7. 7. def __init__(self): self.i2c = I2C(sda=Pin(25),scl=Pin(26)) self.lcd = SSD1306_I2C(128, 64, self.i2c) self.x0 = 0 self.y0 = 0 self.xlen = len(RollingSushi.icon[0]) self.ylen = len(RollingSushi.icon) self.xmax = 128 - self.xlen self.ymax = 64 - self.ylen self.direction = 0 self.lcd.init_display() self.lcd.show() def draw_image(self): for y in range(self.ylen): for x in range(self.xlen): self.lcd.pixel(self.x0+x,self.y0+y,RollingSushi.icon[y][x]) self.lcd.show() if self.direction == 0: for y in range(self.ylen): self.lcd.pixel(self.x0, self.y0+y,0) if self.x0 >= self.xmax: self.direction = 1 else: self.x0 += 1 elif self.direction == 1: for x in range(self.xlen): self.lcd.pixel(self.x0+x, self.y0,0) if self.y0 >= self.ymax: self.direction = 2 else: self.y0 += 1 elif self.direction == 2: for y in range(self.ylen): self.lcd.pixel(self.x0+x+self.xlen-1, self.y0+y,0) if self.x0 <= 0: self.direction = 3 else: self.x0 -= 1 else: for x in range(self.xlen): self.lcd.pixel(self.x0+x, self.y0+self.ylen-1,0) if self.y0 <= 0: self.direction = 0 else: self.y0 -= 1
  8. 8. sushi = RollingSushi() while True: sushi.draw_image()
  9. 9. どんなもので動く?
  10. 10. pyboard
  11. 11. STM32F4 Discovery
  12. 12. ESP8266 (ESP-WROOM-02)
  13. 13. ESP32 (ESP-WROOM-32)
  14. 14. Teensy
  15. 15. ARDUINO M0
  16. 16. wipy
  17. 17. どれも、ちょっと敷居が高いな ラズパイで普通のPython動かすのでよくね?
  18. 18. chibi:bit 英国で100万台を小学校高学年に無料配布した micro:bit の互換機 スイッチサイエンスから3,456円で販売 Cortex-M0、256KB Flash ROM、16KB RAM 5x5マトリクスLED、ボタンx2、 加速度センサ、コンパスセンサー、BLE 開発環境はWebブラウザ上で使える ファームウェアのインストールとか小難しいこと不要
  19. 19. コレ! http://microbit.org
  20. 20. GPIOもそれなりに
  21. 21. muエディタ
  22. 22. Jupyter
  23. 23. まとめ MicroPythonはマイコン向けにPython3を再実 装したもの 組込み開発の経験がないなら micro:bit からは じめるのが一番やさしい 組込み開発の経験があるならESP8266が低価 格で入手しやすい 質問などは懇親会、「Python 札幌」 Slack で http://python-sapporo.github.io/

×