M5StackをMicroPythonで遊ぼう

 M5StackをMicroPythonで遊ぼう

2018 PyCon mini Osaka

7af33601b7d5788de7c255a556d7063a?s=128

mitszo

May 19, 2018
Tweet

Transcript

  1. M5Stack+MicroPython M5StackΛMicroPythonͰ༡΅͏ 2018-05-19 PyCon mini Osaka @mitszo

  2. M5StackΛMicroPythonͰ༡΅͏ ΞδΣϯμ ▸ ࣗݾ঺հ ▸ .4UBDLͷ঺հ ▸ .JDSP1ZUIPOʹ͍ͭͯ ▸ .4UBDLͷ։ൃ؀ڥ

    ▸ .4UBDLͷ.JDSP1ZUIPO؀ڥ
  3. M5StackΛMicroPythonͰ༡΅͏ ࣗݾ঺հ ▸ ࠓ௡ॆਖ਼ʢ͍·ͮΈͭ·͞ʣ!NJUT[P ▸ גࣜձࣾεΠοναΠΤϯεʢגࣜձࣾ-BCʣۈ຿ ▸ ҹ࡮԰Ͱ%51ˠडୗ։ൃձࣾˠ3"%*64ϝʔΧʔˠݱ৬ ▸ ओʹϚωδϝϯτɺ࣌ʑίʔυ

    ▸ 1ZUIPO͞ΘΓ࢝Ίͨͷ͸͋ͨΓ͔Β ▸ ϋʔυ΢ΣΞ͸ڵຯ͋Δ͚Ͳॳ৺ऀϨϕϧ
  4. M5StackΛMicroPythonͰ༡΅͏ ࠷ۙͷ͓࢓ࣄ

  5. M5StackΛMicroPythonͰ༡΅͏ ࠷ۙͷ͓࢓ࣄ

  6. M5StackΛMicroPythonͰ༡΅͏ ࠷ۙͷ͓࢓ࣄ https://www.switch-science.com/catalog/3800/

  7. M5Stack

  8. M5Stack M5Stack ▸ )PNFQBHFIUUQTXXXNTUBDLDPN ▸ UXJUUFS!.4UBDL ▸ (JU)VCIUUQTHJUIVCDPNNTUBDL

  9. M5Stack M5Stack ͷಛ௃

  10. M5Stack M5Stack ͷಛ௃ ▸ σΟεϓϨΠ෇͖ ▸ ࠷ॳ͔ΒέʔεʹೖͬͯΔ ▸ ๛෋ͳ*0ͱωοτϫʔΫ ▸

    1ZUIPOΛ஌ͬͯΕ͹ָ͠ΊΔ
  11. M5Stack M5Stack ͷಛ௃ ▸ ແઢ-"/ʢ()[ʣ ▸ #MVF5PPUI ▸ Y-$% ▸

    όοςϦʔ ▸ Ϙλϯ ▸ εϐʔΧʔ ▸ *4 ▸ NJDSP4% ▸ (307&ʢ*$ʣ ▸ 41*
  12. M5Stack M5Stack ͷ੡඼

  13. M5Stack ৽੡඼ M5Go ▸ IUUQCVZNHPNTUBDLDPN

  14. M5Stack εΠοναΠΤϯεͰചͬͯ·͢ʢએ఻ʣ ▸ IUUQTXXXTXJUDITDJFODFDPNDBUBMPHMJTU

  15. MicroPython

  16. MicroPython MicroPython ▸ IUUQNJDSPQZUIPOPSH ▸ ϚΠίϯ޲͚ͷ1ZUIPOॲཧܥ ▸ ίϯύΠϥɺϥϯλΠϜɺ3&1-ΛؚΉ ▸ ϥΠϒϥϦ

    ▸ IUUQEPDTNJDSPQZUIPOPSHFOMBUFTUQZCPBSEMJCSBSZJOEFYIUNM ▸ ඪ४ϥΠϒϥϦʢ$1ZUIPOʣͷαϒηοτ ▸ lVzϥΠϒϥϦ ▸ .JDSP1ZUIPOϥΠϒϥϦ ▸ ର৅ϋʔυ΢ΣΞ༻ϥΠϒϥϦ
  17. MicroPython ϋʔυ΢ΣΞ ▸ QZCPBSE ▸ &41 ▸ &41 ▸ .JDSPCJU

  18. MicroPython CPythonͱͷҧ͍ ▸ .JDSP1ZUIPOEJ⒎FSFODFTGSPN$1ZUIPO ▸ γϯλοΫε ▸ ݴޠ࢓༷ʢΫϥεɾؔ਺ɾଞʣ ▸ ૊ΈࠐΈܕ

    ▸ Ϟδϡʔϧ
  19. MicroPython CPythonͱͷҧ͍ - γϯλοΫε ▸ ਺஋ϦςϥϧͱΩʔϫʔυͷؒʹεϖʔε͕ඞਢ >>> print(1or 0) 1

    >>> print(1or 0) Traceback (most recent call last): File "<stdin>", line 1 SyntaxError: invalid syntax for integer with base 10 MicroPython ʢM5Stack൛ʣ Python 3.6.4
  20. MicroPython CPythonͱͷҧ͍ - γϯλοΫε ▸ 6OJDPEFOBNFFTDBQF͕࢖͑ͳ͍ >>> print('\N{LATIN SMALL LETTER

    A}') a >>> print('\N{LATIN SMALL LETTER A}') NotImplementedError: unicode name escapes MicroPython ʢM5Stack൛ʣ Python 3.6.4
  21. MicroPython CPythonͱͷҧ͍ - ྫ֎νΣΠϯ ▸ ྫ֎νΣΠϯʢ1&1ʣ͕ະ࣮૷ ▸ ྫ֎Ϋϥεʹ@@DBVTF@@΍@@DPOUFYU@@͕ͳ͍ɻ

  22. >> try: ... try: ... a = {}['a'] ... except

    KeyError as e1: ... raise ValueError() from e1 ... except ValueError as e2: ... print(type(e2.__cause__)) ... <class ‘KeyError'> MicroPython CPythonͱͷҧ͍ - ྫ֎νΣΠϯ Python 3.6.4
  23. >>> try: ... try: ... a = {}['a'] ... except

    KeyError as e1: ... raise ValueError() from e1 ... except ValueError as e2: ... print(type(e2.__cause__)) ... Warning: exception chaining not supported Traceback (most recent call last): File "<stdin>", line 7, in <module> File "<stdin>", line 7, in <module> AttributeError: 'ValueError' object has no attribute '__cause__' >>> e = Exception() >>> dir(e) ['__class__', 'args'] MicroPython CPythonͱͷҧ͍ - ྫ֎νΣΠϯ MicroPython ʢM5Stack൛ʣ
  24. MicroPython CPythonͱͷҧ͍ - ྫ֎ͷϢʔβʔଐੑ ▸ ྫ֎ΠϯελϯεʹϢʔβʔଐੑΛੜ΍ͤͳ͍ɻ

  25. >>> try: ... try: ... a = {}['a'] ... except

    KeyError as e1: ... e1.user_attribute = 'abc' ... raise e1 ... except Exception as e2: ... print(e2.user_attribute) ... abc MicroPython CPythonͱͷҧ͍ - ྫ֎ͷϢʔβʔଐੑ Python 3.6.4
  26. >>> try: ... try: ... a = {}['a'] ... except

    KeyError as e1: ... e1.user_attribute = 'abc' ... raise e1 ... except Exception as e2: ... print(e2.user_attribute) ... Traceback (most recent call last): File "<stdin>", line 8, in <module> File "<stdin>", line 8, in <module> AttributeError: 'AttributeError' object has no attribute 'user_attribute' MicroPython CPythonͱͷҧ͍ - ྫ֎ͷϢʔβʔଐੑ MicroPython ʢM5Stack൛ʣ
  27. MicroPython CPythonͱͷҧ͍ - ྫ֎ͦͷଞ ▸ XIJMFϧʔϓͷܧଓ৚݅Ͱྫ֎͕ൃੜͨ࣌͠ͷߦ൪߸ද͕ࣔ ҟͳΔɻ ▸ ϧʔϓϘσΟͷ຤ඌߦ͕Ϩϙʔτ͞ΕΔɻ ▸

    ྫ֎Ϋϥεʹ͸@@JOJU@@ϝιου͕ͳ͍ɻ ▸ ૊ΈࠐΈྫ֎ΫϥεͷαϒΫϥεԽͷαϙʔτ͕ෆ׬શɻ
  28. MicroPython CPythonͱͷҧ͍ - จࣈྻ ▸ TUSFOETXJUIͰΠϯσοΫεࢦఆ͕࢖͑ͳ͍ ▸ TUSGPSNBUͰଐੑࢦఆ͕࢖͑ͳ͍ >>> 'abc'.endswith('c',

    2) Traceback (most recent call last): File "<stdin>", line 1, in <module> NotImplementedError: start/end indices >>> '{a[0]}'.format(a=[1, 2]) Traceback (most recent call last): File "<stdin>", line 1, in <module> NotImplementedError: attributes not supported yet
  29. MicroPython CPythonͱͷҧ͍ - จࣈྻ ▸ TUSؔ਺ͰΩʔϫʔυҾ਺ࢦఆ͕Ͱ͖ͳ͍ >>> print(str(b'abc', encoding='utf-8')) Traceback

    (most recent call last): File "<stdin>", line 1, in <module> NotImplementedError: keyword argument(s) not yet implemented - use normal args instead >>> print(str(b'abc', 'utf-8')) abc
  30. MicroPython CPythonͱͷҧ͍ - จࣈྻ ▸ SKVTU MKVTU͕ະ࣮૷ɻ ▸ STQMJUͷୈҾ਺ʹ/POFΛࢦఆͰ͖ͳ͍ɻ ▸

    TUSͷαϒΫϥεͱTUSͷൺֱͷڍಈ͕ҟͳΔɻ
  31. MicroPython CPythonͱͷҧ͍ - εϥΠε ▸ CZUFBSSBZͰࠨลʹεϥΠεΛࢦఆͨ͠୅ೖ͕Ͱ͖ͳ͍ ▸ CZUFT จࣈྻͷεϥΠεͰTUFQࢦఆ͕Ͱ͖ͳ͍ ▸

    MJTUͷ࡟আͰTUFQࢦఆ͕Ͱ͖ͳ͍ ▸ MJTUͷεϥΠε୅ೖͰ࢖͑Δͷ͸MJTU͔UVQMF >>> ba[0:1] = [1, 2] >>> print(b’123’[0:3:2]) >>> del lst[0:4:2] >>> lst[0:1] = range(4)
  32. MicroPython CPythonͱͷҧ͍ - jsonϞδϡʔϧ ▸ 4FSJBMJ[BCMF͡Όͳ͍ΦϒδΣΫτΛEVNQͯ͠΋5ZQF&SSPS ʹͳΒͳ͍ɻ

  33. MicroPython CPythonͱͷҧ͍ - jsonϞδϡʔϧ >>> import json >>> data =

    bytes(range(10)) >>> print(json.dumps(data)) Traceback (most recent call last): … TypeError: Object of type 'bytes' is not JSON serializable Python 3.6.4
  34. MicroPython CPythonͱͷҧ͍ - Ϟδϡʔϧ >>> import json >>> data =

    bytes(range(10)) >>> print(json.dumps(data)) "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\t" MicroPython ʢM5Stack൛ʣ
  35. MicroPython CPythonͱͷҧ͍ ▸ ଞʹ΋͍Ζ͍Ζ ▸ IUUQEPDTNJDSPQZUIPOPSHFOMBUFTUQZCPBSE HFOSTUJOEFYIUNM

  36. MicroPython OSͷࢧԉ͕ͳ͍ ▸ ωοτϫʔΫ ▸ ωοτϫʔΫʹ઀ଓ͢Δͱ͜Ζ͔Β࢝·Δ ▸ ূ໌ॻ ▸ ূ໌ॻετΞ͕ͳ͍

    ▸ ࣌ࠁ ▸ ݱࡏ࣌ࠁΛ΋ͬͯͳ͍ ▸ ϑΝΠϧγεςϜ ▸ Ϛ΢ϯτ͢Δͱ͜Ζ͔Β࢝·Δ
  37. ։ൃ؀ڥ M5Stack

  38. ։ൃ؀ڥ M5Stackͷ։ൃ؀ڥ ▸ "SEVJOP*%& ▸ &41"SEVJOP$PSF ▸ .4UBDL$MPVEʢ.JDSP1ZUIPO8FC*%&ʣ ▸ .JDSP1ZUIPOʢ0''-*/&ʣ

  39. ։ൃ؀ڥ M5Stackͷ։ൃ؀ڥ - Arduino IDE .4UBDL%PDVNFOUBUJPO 1.64#υϥΠόΠϯετʔϧ 2."SEVJOP*%&ΛΠϯετʔϧ 3.&41"SEVJOP$PSFϥΠϒϥϦΠ ϯετʔϧ

    4.ϥΠϒϥϦϚωʔδϟͰ.4UBDL௥ Ճ
  40. ։ൃ؀ڥ M5Stackͷ։ൃ؀ڥ - M5Stack Cloud IUUQJPNTUBDLDPN 1.ϑΝʔϜ΢ΣΞΛ.4UBDLʹॻ͖ ࠐΉ 2..4UBDLͷ8J'Jઃఆ 3..4UBDL$MPVEͰσόΠεొ࿥

  41. ։ൃ؀ڥ M5Stackͷ։ൃ؀ڥ - M5Stack Cloud ϑΝʔϜ΢ΣΞͷμ΢ϯϩʔυ IUUQTHJUIVCDPNNTUBDL.$MPVEUSFFNBTUFS pSNXBSFT

  42. ։ൃ؀ڥ M5Stackͷ։ൃ؀ڥ - M5Stack Cloud ϑΝʔϜ΢ΣΞͷॻ͖ࠐΈ IUUQTHJUIVCDPNFTQSFTTJGFTQUPPM ‣ FSBTF@qBTI ‣

    XSJUF@qBTI
  43. ։ൃ؀ڥ M5Stackͷ։ൃ؀ڥ - M5Stack Cloud Wͷը໘දࣔ

  44. ։ൃ؀ڥ M5Stackͷ։ൃ؀ڥ - MicroPython 1.ϑΝʔϜ΢ΣΞΛ.4UBDLʹॻ͖ࠐΉ • IUUQTHJUIVCDPNNTUBDL.$MPVEUSFFNBTUFSpSNXBSFT0''-*/& 2.1ZUIPOϑΝΠϧΛ.4UBDLʹॻ͖ࠐΉ

  45. ։ൃ؀ڥ M5Stackͷ։ൃ؀ڥ - MicroPython 1ZUIPOϑΝΠϧͷసૹʹBEBGSVJUBNQZΛ࢖͏ ‣ IUUQTHJUIVCDPNBEBGSVJUBNQZ $ pip install

    adafruit-ampy
  46. ։ൃ؀ڥ M5Stackͷ։ൃ؀ڥ - MicroPython Usage: ampy [OPTIONS] COMMAND [ARGS]... ampy

    - Adafruit MicroPython Tool Ampy is a tool to control MicroPython boards over a serial connection. Using ampy you can manipulate files on the board's internal filesystem and even run scripts. Options: -p, --port PORT Name of serial port for connected board. [required] -b, --baud BAUD Baud rate for the serial connection. (default 115200) --help Show this message and exit. Commands: get Retrieve a file from the board. ls List contents of a directory on the board. put Put a file on the board. rm Remove a file from the board. run Run a script and print its output.
  47. ։ൃ؀ڥ M5Stackͷ։ൃ؀ڥ - MicroPython ؀ڥม਺".1:@1035Λࢦఆ͓ͯ͘͠ͱָ $ ampy -p /dev/tty.SLAB_USBtoUART ls

  48. ։ൃ؀ڥ M5Stackͷ։ൃ؀ڥ - MicroPython $ sudo cu -s 115200 -l

    /dev/tty.SLAB_USBtoUART Connected. >>> from m5stack import lcd >>> lcd.print('Python!') >>> ΋ͪΖΜ3&1-΋࢖͑·͢ .4UBDLΛ64#έʔϒϧͰ઀ଓͯ͠ɺ
  49. ϓϩάϥϛϯά M5Stack

  50. M5Stackϓϩάϥϛϯά ඞཁͳϑΝΠϧͱىಈॱ 1.CPPUQZ 2.NBJOQZ .JDSP1ZUIPOͷυΩϡϝϯτͰ͸ɺ ‣ CPPUQZˠʢ64#DPOpHVSBUJPOʣˠNBJOQZ ‣ ʮNJDSP4%͕ͬͯ͞͞Δ࣌͸ɺqBTIͱTEͲͪΒ͔Βىಈ ͢Δ͔બ΂Δˠબ΂ͳͦ͞͏

  51. M5Stackϓϩάϥϛϯά boot.py ͱ main.py ͷ࢖͍෼͚ྫ ‣ CPPUQZ ‣ ॳظԽ΍ಈ࡞ঢ়گΛ੔͑Δॲཧ ‣

    8J'Jͷ઀ଓ ‣ /51 ‣ NBJOQZ ‣ ओཁಈ࡞
  52. M5Stackϓϩάϥϛϯά boot.py ͱ main.py ͷ࢖͍෼͚ྫ ॱ൪͚֮ͩ͑ͯΕ͹͋Μ·Γؾ ʹ͠ͳ͍͍ͯ͘ͱ͓΋͍·͢

  53. M5Stackϓϩάϥϛϯά M5Cloud/examples/DigitalClock/

  54. M5Stackϓϩάϥϛϯά M5Cloud/examples/DigitalClock/

  55. M5Stackϓϩάϥϛϯά M5Cloud/examples/DigitalClock/clock.py from m5stack import * import time, _thread, machine

    def clock(): rtc = machine.RTC() print("Synchronize time from NTP server ...") lcd.println("Synchronize time from NTP server ...") rtc.ntp_sync(server="cn.ntp.org.cn") lcd.clear() lcd.setBrightness(200) lcd.font(lcd.FONT_7seg, fixedwidth=True, dist=16, width=2) while True: d = time.strftime("%Y-%m-%d", time.localtime()) t = time.strftime("%H:%M:%S", time.localtime()) lcd.print(d, lcd.CENTER, 50, lcd.ORANGE) lcd.print(t, lcd.CENTER, 130, lcd.ORANGE) time.sleep(1) _thread.start_new_thread('Clock', clock, ())
  56. M5Stackϓϩάϥϛϯά M5Cloud/examples/DigitalClock/main.py from m5stack import * import clock

  57. M5Stackϓϩάϥϛϯά Wi-Fi ʹ઀ଓ͢Δ ‣ ઀ଓˠCPPUQZ ‣ ֬ೝ import network wlan

    = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect(ssid, pwd) if wlan.isconnected(): …
  58. M5Stackϓϩάϥϛϯά Wi-Fi AP ΛεΩϟϯ ‣ εΩϟϯྫ ‣ >>> import network

    >>> wlan = network.WLAN(network.STA_IF) >>> for ap in wlan.scan(): ... print(ap) ... (b'ssid', b’\x10101010', 4, -84, 4, 'WPA_WPA2_PSK', False)
  59. M5Stackϓϩάϥϛϯά time(utime)Ϟδϡʔϧ >>> import time >>> time.localtime() (2018, 5, 12,

    21, 36, 42, 7, 132) >>> time.gmtime() (2018, 5, 12, 13, 36, 47, 7, 132) >>> time.strftime("%Y-%m-%d %H:%M:%S%z") '2018-05-12 13:37:13+0800’ >>> time.strftime("%Y-%m-%d %H:%M:%S%z", time.gmtime()) '2018-05-12 13:37:21+0000’ >>> time.strftime("%Y-%m-%d %H:%M:%S%z", time.localtime()) '2018-05-12 21:37:25+0000'
  60. λΠϜκʔϯΛࢦఆ M5Stackϓϩάϥϛϯά NTP rtc.ntp_sync("ntp.nict.jp", tz='JST-9')

  61. +45Ͱऔಘ M5Stackϓϩάϥϛϯά NTP >>> import time >>> time.localtime() (2018, 5,

    12, 23, 8, 31, 7, 132) >>> time.gmtime() (2018, 5, 12, 14, 8, 36, 7, 132) >>> time.strftime('%Y-%m-%d %H:%M:%S%z') '2018-05-12 14:08:50+0900' >>> time.strftime('%Y-%m-%d %H:%M:%S%z', time.gmtime()) '2018-05-12 14:08:57+0000' >>> time.strftime('%Y-%m-%d %H:%M:%S%z', time.localtime()) '2018-05-12 23:09:01+0000'
  62. M5Stackϓϩάϥϛϯά HTTP ΫϥΠΞϯτ

  63. M5Stackϓϩάϥϛϯά HTTP ΫϥΠΞϯτ ▸ VSFRVFTUT ▸ IUUQTHJUIVCDPNNJDSPQZUIPONJDSPQZUIPOMJC USFFNBTUFSVSFRVFTUT ▸ $1ZUIPOͷSFRVFTUTʹࣅͤͨ"1*ʢۃҰ෦ʣ

  64. M5Stackϓϩάϥϛϯά HTTP ΫϥΠΞϯτ - urequests ‣ (&5 >>> res =

    urequests.get('https://unkobtn.com/') >>> print(res.status_code) 200
  65. M5Stackϓϩάϥϛϯά HTTP ΫϥΠΞϯτ - urequests ‣ 1045 URL = ‘https://maker.ifttt.com/trigger/ev/with/key/..’

    r = urequests.post(URL, json={'value1': 'M5Stack'}, headers={'Content-Type': 'application/json'}, ) lcd.println(r.text)
  66. M5Stackϓϩάϥϛϯά HTTP ΫϥΠΞϯτ - urequests ▸ αʔόʔূ໌ॻΛݕূ͠ͳ͍

  67. M5Stackϓϩάϥϛϯά HTTP ΫϥΠΞϯτ - urequests ‣ $1ZUIPOͷSFRVFTUTͷ৔߹ >>> requests.get('https://192.168.11.6:4433/hello') Traceback

    (most recent call last): ... requests.exceptions.SSLError: HTTPSConnectionPool(host='localhost', port=4433): Max retries exceeded with url: /hello (Caused by SSLError(SSLError(1, '[SSL: CER TIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c: 777)'),))
  68. M5Stackϓϩάϥϛϯά HTTP ΫϥΠΞϯτ - urequests ‣ $1ZUIPOͷSFRVFTUTͰWFSJGZ'BMTFΛࢦఆͨ͠৔߹ >>> requests.get('https://192.168.11.6:4433/hello', verify=False)

    /Users/mitszo/.virtualenvs/py3w/lib/python3.6/site- packages/urllib3/connectionpo ol.py:858: InsecureRequestWarning: Unverified HTTPS request is being made. Addin g certificate verification is strongly advised. See: https://urllib3.readthedocs .io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning) <Response [200]>
  69. M5Stackϓϩάϥϛϯά HTTP ΫϥΠΞϯτ - urequests ‣ .JDSP1ZUIPOͷ৔߹ >>> import urequests

    >>> urequests.get('https://192.168.11.6:4433/hello') <Response object at 3ffcb9e0> >>> _.text 'Hello!\n'
  70. M5Stackϓϩάϥϛϯά HTTP ΫϥΠΞϯτ - urequests ‣ ࢀߟ"SEVJOP*%&ͷ৔߹ʢূ໌ॻͷࢦఆ͕ඞཁʣ const char* root_ca

    = \ "-----BEGIN CERTIFICATE-----\n" “MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMA...” void PostMessage() { http.begin(URL, root_ca); http.addHeader("Content-Type", "application/json; charset=utf-8"); String reqBody = "{\"value1\": \"M5Stack\"}"; int status_code = http.POST(reqBody); String body = http.getString() ...
  71. M5Stackϓϩάϥϛϯά Թ࣪౓ɾؾѹηϯαʔΛ࢖͏ ▸ .4UBDLͰηϯαʔσʔλʔΛ "NCJFOUʹૹΔ .JDSP1ZUIPOฤ ▸ #.&౥ࡌɹԹ࣪౓ɾؾѹ ηϯαϞδϡʔϧ

  72. M5Stackϓϩάϥϛϯά Թ࣪౓ɾؾѹηϯαʔΛ࢖͏ def main(): ntpsync() i2c = I2C(scl=Pin(22), sda=Pin(21)) bme

    = bme280.BME280(i2c=i2c) while True: lcd.font(lcd.FONT_DejaVu18) lcd.text(30, 30, utime.strftime( ‘%Y-%m-%d %H:%M:%S', utime.localtime())) lcd.font(lcd.FONT_DejaVu24) values = bme.values lcd.print(values[0], lcd.RIGHT, 80) lcd.print(values[1], lcd.RIGHT, 110) lcd.print(values[2], lcd.RIGHT, 140) utime.sleep(1)
  73. M5Stackϓϩάϥϛϯά λΠϜΧʔυελϯύʔ ▸ 8J'J઀ଓ ▸ /51ಉظ ▸ ࣌ܭදࣔ ▸ Ϙλϯԡͨ͠Β1045

    ▸ ௚ۙͷσʔλΛ(&5ͯ͠දࣔ
  74. ςΩετ M5Stack ϢʔβʔͷΈͳ͞Μ https://m5stack.connpass.com/event/84221/

  75. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠