Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

M5StackΛMicroPythonͰ༡΅͏ ࣗݾ঺հ ▸ ࠓ௡ॆਖ਼ʢ͍·ͮΈͭ·͞ʣ!NJUT[P ▸ גࣜձࣾεΠοναΠΤϯεʢגࣜձࣾ-BCʣۈ຿ ▸ ҹ࡮԰Ͱ%51ˠडୗ։ൃձࣾˠ3"%*64ϝʔΧʔˠݱ৬ ▸ ओʹϚωδϝϯτɺ࣌ʑίʔυ ▸ 1ZUIPO͞ΘΓ࢝Ίͨͷ͸͋ͨΓ͔Β ▸ ϋʔυ΢ΣΞ͸ڵຯ͋Δ͚Ͳॳ৺ऀϨϕϧ

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

M5Stack

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

M5Stack M5Stack ͷಛ௃

Slide 10

Slide 10 text

M5Stack M5Stack ͷಛ௃ ▸ σΟεϓϨΠ෇͖ ▸ ࠷ॳ͔ΒέʔεʹೖͬͯΔ ▸ ๛෋ͳ*0ͱωοτϫʔΫ ▸ 1ZUIPOΛ஌ͬͯΕ͹ָ͠ΊΔ

Slide 11

Slide 11 text

M5Stack M5Stack ͷಛ௃ ▸ ແઢ-"/ʢ()[ʣ ▸ #MVF5PPUI ▸ Y-$% ▸ όοςϦʔ ▸ Ϙλϯ ▸ εϐʔΧʔ ▸ *4 ▸ NJDSP4% ▸ (307&ʢ*$ʣ ▸ 41*

Slide 12

Slide 12 text

M5Stack M5Stack ͷ੡඼

Slide 13

Slide 13 text

M5Stack ৽੡඼ M5Go ▸ IUUQCVZNHPNTUBDLDPN

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

MicroPython

Slide 16

Slide 16 text

MicroPython MicroPython ▸ IUUQNJDSPQZUIPOPSH ▸ ϚΠίϯ޲͚ͷ1ZUIPOॲཧܥ ▸ ίϯύΠϥɺϥϯλΠϜɺ3&1-ΛؚΉ ▸ ϥΠϒϥϦ ▸ IUUQEPDTNJDSPQZUIPOPSHFOMBUFTUQZCPBSEMJCSBSZJOEFYIUNM ▸ ඪ४ϥΠϒϥϦʢ$1ZUIPOʣͷαϒηοτ ▸ lVzϥΠϒϥϦ ▸ .JDSP1ZUIPOϥΠϒϥϦ ▸ ର৅ϋʔυ΢ΣΞ༻ϥΠϒϥϦ

Slide 17

Slide 17 text

MicroPython ϋʔυ΢ΣΞ ▸ QZCPBSE ▸ &41 ▸ &41 ▸ .JDSPCJU

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

MicroPython CPythonͱͷҧ͍ - γϯλοΫε ▸ ਺஋ϦςϥϧͱΩʔϫʔυͷؒʹεϖʔε͕ඞਢ >>> print(1or 0) 1 >>> print(1or 0) Traceback (most recent call last): File "", line 1 SyntaxError: invalid syntax for integer with base 10 MicroPython ʢM5Stack൛ʣ Python 3.6.4

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

MicroPython CPythonͱͷҧ͍ - ྫ֎νΣΠϯ ▸ ྫ֎νΣΠϯʢ1&1ʣ͕ະ࣮૷ ▸ ྫ֎Ϋϥεʹ@@DBVTF@@΍@@DPOUFYU@@͕ͳ͍ɻ

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

>>> 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 "", line 7, in File "", line 7, in AttributeError: 'ValueError' object has no attribute '__cause__' >>> e = Exception() >>> dir(e) ['__class__', 'args'] MicroPython CPythonͱͷҧ͍ - ྫ֎νΣΠϯ MicroPython ʢM5Stack൛ʣ

Slide 24

Slide 24 text

MicroPython CPythonͱͷҧ͍ - ྫ֎ͷϢʔβʔଐੑ ▸ ྫ֎ΠϯελϯεʹϢʔβʔଐੑΛੜ΍ͤͳ͍ɻ

Slide 25

Slide 25 text

>>> 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

Slide 26

Slide 26 text

>>> 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 "", line 8, in File "", line 8, in AttributeError: 'AttributeError' object has no attribute 'user_attribute' MicroPython CPythonͱͷҧ͍ - ྫ֎ͷϢʔβʔଐੑ MicroPython ʢM5Stack൛ʣ

Slide 27

Slide 27 text

MicroPython CPythonͱͷҧ͍ - ྫ֎ͦͷଞ ▸ XIJMFϧʔϓͷܧଓ৚݅Ͱྫ֎͕ൃੜͨ࣌͠ͷߦ൪߸ද͕ࣔ ҟͳΔɻ ▸ ϧʔϓϘσΟͷ຤ඌߦ͕Ϩϙʔτ͞ΕΔɻ ▸ ྫ֎Ϋϥεʹ͸@@JOJU@@ϝιου͕ͳ͍ɻ ▸ ૊ΈࠐΈྫ֎ΫϥεͷαϒΫϥεԽͷαϙʔτ͕ෆ׬શɻ

Slide 28

Slide 28 text

MicroPython CPythonͱͷҧ͍ - จࣈྻ ▸ TUSFOETXJUIͰΠϯσοΫεࢦఆ͕࢖͑ͳ͍ ▸ TUSGPSNBUͰଐੑࢦఆ͕࢖͑ͳ͍ >>> 'abc'.endswith('c', 2) Traceback (most recent call last): File "", line 1, in NotImplementedError: start/end indices >>> '{a[0]}'.format(a=[1, 2]) Traceback (most recent call last): File "", line 1, in NotImplementedError: attributes not supported yet

Slide 29

Slide 29 text

MicroPython CPythonͱͷҧ͍ - จࣈྻ ▸ TUSؔ਺ͰΩʔϫʔυҾ਺ࢦఆ͕Ͱ͖ͳ͍ >>> print(str(b'abc', encoding='utf-8')) Traceback (most recent call last): File "", line 1, in NotImplementedError: keyword argument(s) not yet implemented - use normal args instead >>> print(str(b'abc', 'utf-8')) abc

Slide 30

Slide 30 text

MicroPython CPythonͱͷҧ͍ - จࣈྻ ▸ SKVTU MKVTU͕ະ࣮૷ɻ ▸ STQMJUͷୈҾ਺ʹ/POFΛࢦఆͰ͖ͳ͍ɻ ▸ TUSͷαϒΫϥεͱTUSͷൺֱͷڍಈ͕ҟͳΔɻ

Slide 31

Slide 31 text

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)

Slide 32

Slide 32 text

MicroPython CPythonͱͷҧ͍ - jsonϞδϡʔϧ ▸ 4FSJBMJ[BCMF͡Όͳ͍ΦϒδΣΫτΛEVNQͯ͠΋5ZQF&SSPS ʹͳΒͳ͍ɻ

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

MicroPython CPythonͱͷҧ͍ - Ϟδϡʔϧ >>> import json >>> data = bytes(range(10)) >>> print(json.dumps(data)) "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\t" MicroPython ʢM5Stack൛ʣ

Slide 35

Slide 35 text

MicroPython CPythonͱͷҧ͍ ▸ ଞʹ΋͍Ζ͍Ζ ▸ IUUQEPDTNJDSPQZUIPOPSHFOMBUFTUQZCPBSE HFOSTUJOEFYIUNM

Slide 36

Slide 36 text

MicroPython OSͷࢧԉ͕ͳ͍ ▸ ωοτϫʔΫ ▸ ωοτϫʔΫʹ઀ଓ͢Δͱ͜Ζ͔Β࢝·Δ ▸ ূ໌ॻ ▸ ূ໌ॻετΞ͕ͳ͍ ▸ ࣌ࠁ ▸ ݱࡏ࣌ࠁΛ΋ͬͯͳ͍ ▸ ϑΝΠϧγεςϜ ▸ Ϛ΢ϯτ͢Δͱ͜Ζ͔Β࢝·Δ

Slide 37

Slide 37 text

։ൃ؀ڥ M5Stack

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

։ൃ؀ڥ M5Stackͷ։ൃ؀ڥ - M5Stack Cloud Wͷը໘දࣔ

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

։ൃ؀ڥ 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.

Slide 47

Slide 47 text

։ൃ؀ڥ M5Stackͷ։ൃ؀ڥ - MicroPython ؀ڥม਺".1:@1035Λࢦఆ͓ͯ͘͠ͱָ $ ampy -p /dev/tty.SLAB_USBtoUART ls

Slide 48

Slide 48 text

։ൃ؀ڥ M5Stackͷ։ൃ؀ڥ - MicroPython $ sudo cu -s 115200 -l /dev/tty.SLAB_USBtoUART Connected. >>> from m5stack import lcd >>> lcd.print('Python!') >>> ΋ͪΖΜ3&1-΋࢖͑·͢ .4UBDLΛ64#έʔϒϧͰ઀ଓͯ͠ɺ

Slide 49

Slide 49 text

ϓϩάϥϛϯά M5Stack

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

M5Stackϓϩάϥϛϯά boot.py ͱ main.py ͷ࢖͍෼͚ྫ ॱ൪͚֮ͩ͑ͯΕ͹͋Μ·Γؾ ʹ͠ͳ͍͍ͯ͘ͱ͓΋͍·͢

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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, ())

Slide 56

Slide 56 text

M5Stackϓϩάϥϛϯά M5Cloud/examples/DigitalClock/main.py from m5stack import * import clock

Slide 57

Slide 57 text

M5Stackϓϩάϥϛϯά Wi-Fi ʹ઀ଓ͢Δ ‣ ઀ଓˠCPPUQZ ‣ ֬ೝ import network wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect(ssid, pwd) if wlan.isconnected(): …

Slide 58

Slide 58 text

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)

Slide 59

Slide 59 text

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'

Slide 60

Slide 60 text

λΠϜκʔϯΛࢦఆ M5Stackϓϩάϥϛϯά NTP rtc.ntp_sync("ntp.nict.jp", tz='JST-9')

Slide 61

Slide 61 text

+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'

Slide 62

Slide 62 text

M5Stackϓϩάϥϛϯά HTTP ΫϥΠΞϯτ

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

M5Stackϓϩάϥϛϯά HTTP ΫϥΠΞϯτ - urequests ‣ (&5 >>> res = urequests.get('https://unkobtn.com/') >>> print(res.status_code) 200

Slide 65

Slide 65 text

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)

Slide 66

Slide 66 text

M5Stackϓϩάϥϛϯά HTTP ΫϥΠΞϯτ - urequests ▸ αʔόʔূ໌ॻΛݕূ͠ͳ͍

Slide 67

Slide 67 text

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)'),))

Slide 68

Slide 68 text

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)

Slide 69

Slide 69 text

M5Stackϓϩάϥϛϯά HTTP ΫϥΠΞϯτ - urequests ‣ .JDSP1ZUIPOͷ৔߹ >>> import urequests >>> urequests.get('https://192.168.11.6:4433/hello') >>> _.text 'Hello!\n'

Slide 70

Slide 70 text

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() ...

Slide 71

Slide 71 text

M5Stackϓϩάϥϛϯά Թ࣪౓ɾؾѹηϯαʔΛ࢖͏ ▸ .4UBDLͰηϯαʔσʔλʔΛ "NCJFOUʹૹΔ .JDSP1ZUIPOฤ ▸ #.&౥ࡌɹԹ࣪౓ɾؾѹ ηϯαϞδϡʔϧ

Slide 72

Slide 72 text

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)

Slide 73

Slide 73 text

M5Stackϓϩάϥϛϯά λΠϜΧʔυελϯύʔ ▸ 8J'J઀ଓ ▸ /51ಉظ ▸ ࣌ܭදࣔ ▸ Ϙλϯԡͨ͠Β1045 ▸ ௚ۙͷσʔλΛ(&5ͯ͠දࣔ

Slide 74

Slide 74 text

ςΩετ M5Stack ϢʔβʔͷΈͳ͞Μ https://m5stack.connpass.com/event/84221/

Slide 75

Slide 75 text

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