Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Controlling Arduino With PHP

Controlling Arduino With PHP

PHPNW2015 Unconference https://joind.in/talk/view/15483

Thomas Weinert

October 03, 2015
Tweet

More Decks by Thomas Weinert

Other Decks in Programming

Transcript

  1. CONTROLLING ARDUINO
    WITH PHP
    CONNECTIONS TO THE PHYSICAL WORLD
    @ThomasWeinert

    View full-size slide

  2. ARDUINO
    Arduino is an open-source electronics
    prototyping platform based on flexible, easy-to-
    use hardware and software. It's intended for
    artists, designers, hobbyists and anyone
    interested in creating interactive objects or
    environments.

    View full-size slide

  3. ARDUINO MEGA

    View full-size slide

  4. SHIELDS
    HTTP://SHIELDLIST.ORG/

    View full-size slide

  5. ARDUINO NANO

    View full-size slide

  6. NANO ON BREADBOARD

    View full-size slide

  7. NANO ON BASE

    View full-size slide

  8. BREADBOARD HALFSIZE

    View full-size slide

  9. BREADBOARD SCHEMA

    View full-size slide

  10. BREADBOARD IN USE

    View full-size slide

  11. BREADBOARD IN USE

    View full-size slide

  12. FRITZING
    http://fritzing.org














    $
    $
    %
    %
    &
    &
    '
    '
    (
    (
    )
    )
    *
    *
    +
    +
    ,
    ,
    -
    -

    View full-size slide

  13. FIRMATA PROTOCOL
    Midi Based
    Pin Status
    Pin Manipulation
    Extended Commands

    View full-size slide

  14. FIRMATA TEST

    View full-size slide

  15. FIRMATA TEST PHP

    View full-size slide

  16. PHP - SERIAL PORTS
    + Just streams
    - Console commands for configuration

    View full-size slide

  17. WINDOWS
    - fread() blocks until it gets data.

    View full-size slide

  18. GORILLA PHPMAKE\SERIALPORT
    https://github.com/oasynnoum/phpmake_serialport

    View full-size slide

  19. FIRST PROJECT

    View full-size slide

  20. COMPOSER CREATE
    …‘’‘•‡”…”‡ƒ–‡Ş’”‘Œ‡…–…ƒ”‹…ƒŵ…Š‹’Ş•‡Ž‡–‘Ž‡†ŞŞ•–ƒ„‹Ž‹–›ʰ†‡˜

    View full-size slide

  21. CONFIGURE BOOTSTRAP
    ŵƋƋ
    Ƌ•‡”‹ƒŽŞ•‡”‹ƒŽ…‘‡…–‹‘
    Ƌ–…’Ş–…’…‘‡…–‹‘ſ‡–™‘”•Š‹‡Ž†‘”•‡”’”‘š›ƀ
    Ƌŵ
    †‡ˆ‹‡ſɐɏ ɏɐřɐ•‡”‹ƒŽɐƀŚ
    †‡ˆ‹‡ſɐɏ ɏɏɐřɐŵ†‡˜ŵ––›ɥɐƀŚ
    †‡ˆ‹‡ſɐɏ ɏɏɐřɬɮɭɥɥƀŚ
    †‡ˆ‹‡ſɐɏ ɏɏɐřɐɨɩɮŜɥŜɥŜɨɐƀŚ
    †‡ˆ‹‡ſɐɏ ɏɏɐřɬɪɪɰƀŚ

    View full-size slide

  22. SKELETON
    ɛ„‘ƒ”†ʰ‹…Ž—†‡ſɏɏɏɏŜɐŵ„‘‘–•–”ƒ’Ŝ’Š’ɐƀŚ
    —•‡ƒ”‹…ƒɎŠ‹’ƒ•Š‹’Ś
    ɛ„‘ƒ”†
    Şʴƒ…–‹˜ƒ–‡ſƀ
    Şʴ†‘‡ſ
    ˆ—…–‹‘ſƀ—•‡ſɛ„‘ƒ”†ƀƇ
    ŵŵ–ƒ”–Š‡”‡Š
    ƈ
    ƀŚ
    ƒ”‹…ƒɎ‘Ɏ˜‡–Ɏ‘‘’Ɏ ƒ…–‘”›śś”—ſƀŚ

    View full-size slide

  23. LED OBJECT
    ɛ„‘ƒ”†ʰ‹…Ž—†‡ſɏɏɏɏŜɐŵ„‘‘–•–”ƒ’Ŝ’Š’ɐƀŚ
    —•‡ƒ”‹…ƒɎŠ‹’ƒ•Š‹’Ś
    ɛ„‘ƒ”†
    Şʴƒ…–‹˜ƒ–‡ſƀ
    Şʴ†‘‡ſ
    ˆ—…–‹‘ſƀ—•‡ſɛ„‘ƒ”†ƀƇ
    ɛŽ‡†ʰ‡™Š‹’Ɏ‡†ſɛ„‘ƒ”†Şʴ’‹•ƃɨɪƄƀŚ
    ɛŽ‡†Şʴ•–”‘„‡ſɩɥɥɥƀŞʴ‘ſƀŚ
    ƈ
    ƀŚ
    ƒ”‹…ƒɎ‘Ɏ˜‡–Ɏ‘‘’Ɏ ƒ…–‘”›śś”—ſƀŚ

    View full-size slide

  24. ,R (YHQW/RRS
    6HUYHU
    )LUPDWD 3URWRFRO
    &KLS 'HYLFHV






    View full-size slide

  25. BASIC BLINK
    ɛ„‘ƒ”†Şʴ’‹‘†‡ſɨɪřɥšɥɨƀŚ
    ™Š‹Ž‡ſƀƇ
    ɛ„‘ƒ”†Şʴ†‹‰‹–ƒŽ”‹–‡ſɨɪřɥš ƀŚ
    •Ž‡‡’ſɨƀŚ
    ɛ„‘ƒ”†Şʴ†‹‰‹–ƒŽ”‹–‡ſɨɪřɥšɥɥƀŚ
    •Ž‡‡’ſɨƀŚ
    ƈ

    View full-size slide

  26. BASIC BLINK OOP
    ɛ„‘ƒ”†Şʴ’‹•ƃɨɪƄŞʴ‘†‡ʰƒ”‹…ƒɎ ‹”ƒ–ƒɎ‹śśɏŚ
    ™Š‹Ž‡ſƀƇ
    ɛ„‘ƒ”†Şʴ’‹•ƃɨɪƄŞʴ†‹‰‹–ƒŽʰŠɛ„‘ƒ”†Şʴ’‹•ƃɨɪƄŞʴ†‹‰‹–ƒŽŚ
    •Ž‡‡’ſɨƀŚ
    ƈ

    View full-size slide

  27. BLINK NONBLOCKING
    ɛŽ‘‘’ʰ‘Ɏ˜‡–Ɏ‘‘’Ɏ ƒ…–‘”›śś‰‡–ſƀŚ
    ɛ„‘ƒ”†
    Şʴƒ…–‹˜ƒ–‡ſƀ
    Şʴ†‘‡ſ
    ˆ—…–‹‘ſƀ—•‡ſɛ„‘ƒ”†řɛŽ‘‘’ƀƇ
    ɛ’‹ʰɛ„‘ƒ”†Şʴ’‹•ƃɨɪƄŚ
    ɛ’‹Şʴ‘†‡ʰ ‹”ƒ–ƒɎ‹śśɏŚ
    ɛŽ‘‘’Şʴ•‡––‡”˜ƒŽſ
    ˆ—…–‹‘ſƀ—•‡ſɛ’‹ƀƇ
    ɛ’‹Şʴ†‹‰‹–ƒŽʰŠɛ’‹Şʴ†‹‰‹–ƒŽŚ
    ƈř
    ɨɥɥɥ
    ƀŚ
    ƈ
    ƀŚ
    ɛŽ‘‘’Şʴ”—ſƀŚ

    View full-size slide

  28. CARICA CHIP
    ɛŽ‡†ʰ‡™ƒ”‹…ƒɎŠ‹’Ɏ‡†ſɛ„‘ƒ”†Şʴ’‹•ƃɨɪƄƀŚ
    ɛŽ‡†Şʴ•–”‘„‡ſƀŞʴ‘ſƀŚ

    View full-size slide

  29. CARICA CHIP
    ɛŽ‡†ʰ‡™ƒ”‹…ƒɎŠ‹’Ɏ‡†ſɛ„‘ƒ”†Şʴ’‹•ƃɨɪƄƀŚ
    ɛŽ‡†Şʴ’—Ž•‡ſƀŞʴ‘ſƀŚ

    View full-size slide

  30. CARICA CHIP
    ɛŽ‡†ʰ‡™ƒ”‹…ƒɎŠ‹’Ɏ‡†ſɛ„‘ƒ”†Şʴ’‹•ƃɨɪƄƀŚ
    ɛŽ‡†Şʴ„”‹‰Š–‡••ſɥŜɬƀŞʴ’—Ž•‡ſƀŞʴ‘ſƀŚ

    View full-size slide

  31. CARICA IO
    Event Loop
    Event Emitter
    Promises
    Device Interfaces

    View full-size slide

  32. JAVASCRIPT EXAMPLE
    ˜ƒ”‡ʰ†‘…—‡–Ŝ‰‡–Ž‡‡–›†ſɐ‘—–’—–ɐƀŚ
    ˜ƒ”…‘—–‡”ʰɥŚ
    ˜ƒ”‹–‡”˜ƒŽʰ™‹†‘™Ŝ•‡––‡”˜ƒŽſ
    ˆ—…–‹‘ſƀƇ
    ‡Ŝ–‡š–‘–‡–ʰ‡Ŝ–‡š–‘–‡–ʫ…‘—–‡”Ŝ–‘–”‹‰ſƀʫɐřɐŚ
    …‘—–‡”ʫʫŚ
    ƈř
    ɨɥɥɥ
    ƀŚ

    View full-size slide

  33. PHP EXAMPLE
    ɛŽ‘‘’ʰƒ”‹…ƒɎ‘Ɏ˜‡–Ɏ‘‘’Ɏ ƒ…–‘”›śś‰‡–ſƀŚ
    ɛŽ‘‘’Şʴ•‡––‡”˜ƒŽſ
    ˆ—…–‹‘ſƀƇ
    •–ƒ–‹…ɛ‹ʰɥŚ
    ‡…Š‘ɛ‹ʫʫŚ
    ƈř
    ɨɥɥɥ
    ƀŚ
    ɛŽ‘‘’Şʴ”—ſƀŚ

    View full-size slide

  34. PROMISES
    They describe an object that acts as a proxy for a
    result that is initially unknown, usually because
    the computation of its value is yet incomplete.

    View full-size slide

  35. JAVASCRIPT EXAMPLE
    Œ—‡”›
    Ŝ‰‡–ſɐŠ‡ŽŽ‘Ş™‘”Ž†ŜšŽɐƀ
    Ŝ†‘‡ſ
    ˆ—…–‹‘ſšŽƀƇ
    ƒŽ‡”–ſɐŽ‘ƒ†‡†ŜɐƀŚ
    ƈ
    ƀ
    ƀŚ

    View full-size slide

  36. PHP EXAMPLE
    ɛ›•“Ž‡ʰ‡™ƒ”‹…ƒɎ‘Ɏ‡ˆ‡””‡†Ɏ›ſ‡™›•“Ž‹ſɐŽ‘…ƒŽŠ‘•–ɐƀƀŚ
    ɛ›•“Ž™‘ʰ‡™ƒ”‹…ƒɎ‘Ɏ‡ˆ‡””‡†Ɏ›ſ‡™›•“Ž‹ſɐŽ‘…ƒŽŠ‘•–ɐƀƀŚ
    ɛ–‹‡ʰ‹…”‘–‹‡ſƀŚ
    ɛ†‡„—‰ʰˆ—…–‹‘ſɛ”‡•—Ž–ƀ—•‡ſɛ–‹‡ƀƇ
    ˜ƒ”ɏ†—’ſ‹–‡”ƒ–‘”ɏ–‘ɏƒ””ƒ›ſɛ”‡•—Ž–ƀƀŚ
    ˜ƒ”ɏ†—’ſ‹…”‘–‹‡ſƀŞɛ–‹‡ƀŚ
    ƈŚ
    ɛ“—‡”‹‡•ʰƒ”‹…ƒɎ‘Ɏ‡ˆ‡””‡†śśŠ‡ſ
    ɛ›•“Ž‡ſɑɐ—‡”›ɨɐřſɬƀɑƀ
    Şʴ†‘‡ſɛ†‡„—‰ƀř
    ɛ›•“Ž™‘ſɑɐ—‡”›ɩɐřſɨƀɑƀ
    Şʴ†‘‡ſɛ†‡„—‰ƀ
    ƀŚ
    ƒ”‹…ƒɎ‘Ɏ˜‡–Ɏ‘‘’Ɏ ƒ…–‘”›śś”—ſɛ“—‡”‹‡•ƀŚ

    View full-size slide

  37. EVENT EMITTER
    ɛ•–”‡ƒʰ‡™–”‡ƒɎ ‹Ž‡ſɐ…śŵ–’ŵ•ƒ’Ž‡Ŝ–š–ɐƀŚ
    ɛ•–”‡ƒŞʴ‡˜‡–•ſƀŞʴ‘ſ
    ɐ”‡ƒ†Ş†ƒ–ƒɐř
    ˆ—…–‹‘ſɛ†ƒ–ƒƀƇ
    ‡…Š‘ɛ†ƒ–ƒŚ
    ƈ
    ƀŚ
    ɛ•–”‡ƒŞʴ‡˜‡–•ſƀŞʴ‘ſ
    ɐ‡””‘”ɐř
    ˆ—…–‹‘ſɛ‡””‘”ƀ—•‡ſɛŽ‘‘’ƀƇ
    ‡…Š‘ɛ‡””‘”Ś
    ɛŽ‘‘’Şʴ•–‘’ſƀŚ
    ƈ
    ƀŚ

    View full-size slide

  38. HTTPSERVER
    —•‡ƒ”‹…ƒɎ‘Ɏ‡–™‘”Ɏ––’Ś
    ɛ”‘—–‡ʰ‡™––’Ɏ‘—–‡ſƀŚ
    ɛ”‘—–‡Şʴƒ–…Šſ
    ɐŵŠ‡ŽŽ‘ŵƇƒ‡ƈɐř
    ˆ—…–‹‘ſ––’Ɏ‡“—‡•–ɛ”‡“—‡•–řɛ’ƒ”ƒ‡–‡”•ƀƇ
    ɛ”‡•’‘•‡ʰɛ”‡“—‡•–Şʴ…”‡ƒ–‡‡•’‘•‡ſ
    ‡™––’Ɏ‡•’‘•‡Ɏ‘–‡–Ɏ–”‹‰ſ
    ɑ‡ŽŽ‘ɑŜɛ’ƒ”ƒ‡–‡”•ƃɐƒ‡ɐƄŜɑŠɎɑ
    ƀ
    ƀŚ
    ”‡–—”ɛ”‡•’‘•‡Ś
    ƈ
    ƀŚ

    View full-size slide

  39. FILES
    ɛ”‘—–‡Şʴƒ–…ŠſɐŵŠ‡ŽŽ‘ɐř‡™––’Ɏ‘—–‡Ɏ ‹Ž‡ſɏɏɏɏŜɐŵˆ‹Ž‡•ŵŠ‡ŽŽ‘ŜŠ–ŽɐƀƀŚ
    ɛ”‘—–‡Şʴ•–ƒ”–•‹–Šſɐŵˆ‹Ž‡•ɐř‡™––’Ɏ‘—–‡Ɏ‹”‡…–‘”›ſɏɏɏɏƀƀŚ
    ɛ•‡”˜‡”ʰ‡™ƒ”‹…ƒɎ‘Ɏ‡–™‘”Ɏ––’Ɏ‡”˜‡”ſɛ”‘—–‡ƀŚ
    ɛ•‡”˜‡”ŞʴŽ‹•–‡ſɯɥɯɥƀŚ

    View full-size slide

  40. INTERACTIVE LED

    View full-size slide

  41. HTML FILE
    ʳŠŠ–Žʴ
    ʳŠ–Žʴ
    ʳŠ‡ƒ†ʴ
    ʳ–‹–Ž‡ʴ‡†™‹–…Šʳŵ–‹–Ž‡ʴ
    ʳŵŠ‡ƒ†ʴ
    ʳ„‘†›ʴ
    ʳˆ‘”ƒ…–‹‘ʰɑŜŵ•™‹–…Šŵ‘ɑ–ƒ”‰‡–ʰɑ‹ˆ”ƒ‡ɑʴ
    ʳ„—––‘–›’‡ʰɑ•—„‹–ɑʴʳŵ„—––‘ʴ
    ʳŵˆ‘”ʴ
    ʳˆ‘”ƒ…–‹‘ʰɑŜŵ•™‹–…Šŵ‘ˆˆɑ–ƒ”‰‡–ʰɑ‹ˆ”ƒ‡ɑʴ
    ʳ„—––‘–›’‡ʰɑ•—„‹–ɑʴˆˆʳŵ„—––‘ʴ
    ʳŵˆ‘”ʴ
    ʳ‹ˆ”ƒ‡•–›Ž‡ʰɑ™‹†–Šśɩɥɥ’šŚŠ‡‹‰Š–śɫɥ’šŚ„‘”†‡”ś‘‡Śɑ•”…ʰɑƒ„‘—–ś„Žƒɑƒ‡ʰɑ‹ˆ”ƒ‡ɑ
    ʳŵ„‘†›ʴ
    ʳŵŠ–Žʴ

    View full-size slide

  42. PHP SERVER
    —•‡ƒ”‹…ƒɎ‘Ɏ‡–™‘”Ɏ––’Ś
    ɛ„‘ƒ”†
    Şʴƒ…–‹˜ƒ–‡ſƀ
    Şʴ†‘‡ſ
    ˆ—…–‹‘ſƀ—•‡ſɛ„‘ƒ”†ƀƇ
    ɛŽ‡†ʰ‡™ƒ”‹…ƒɎŠ‹’Ɏ‡†ſɛ„‘ƒ”†Şʴ’‹•ƃɩɥƄƀŚ
    ɛ”‘—–‡ʰ‡™––’Ɏ‘—–‡ſƀŚ
    ɛ”‘—–‡Şʴƒ–…Šſ
    ɐŵ•™‹–…ŠŵƇ•–ƒ–‡ƈɐř
    ˆ—…–‹‘ſ––’Ɏ‡“—‡•–ɛ”‡“—‡•–řƒ””ƒ›ɛ’ƒ”ƒ‡–‡”•ƀ—•‡ſɛŽ‡†ƀƇ
    ‹ˆſɛ’ƒ”ƒ‡–‡”•ƃɐ•–ƒ–‡ɐƄʰʰɐ‘ɐƀƇ
    ɛŽ‡†Şʴ‘ſƀŚ
    ɛ‡••ƒ‰‡ʰɐɐŚ
    ƈ‡Ž•‡Ƈ
    ɛŽ‡†Şʴ‘ˆˆſƀŚ

    View full-size slide

  43. COLOR CIRCLE

    View full-size slide

  44. SERVER
    ˆ—…–‹‘ſƀ—•‡ſɛ„‘ƒ”†ƀƇ
    ɛŽ‡†ʰ‡™ƒ”‹…ƒɎŠ‹’Ɏ‰„Ɏ‡†ſ
    ɛ„‘ƒ”†Şʴ’‹•ƃɪƄřɛ„‘ƒ”†Şʴ’‹•ƃɬƄřɛ„‘ƒ”†Şʴ’‹•ƃɭƄ
    ƀŚ
    ɛ”‘—–‡ʰ‡™ƒ”‹…ƒɎ‘Ɏ‡–™‘”Ɏ––’Ɏ‘—–‡ſƀŚ
    ɛ”‘—–‡Şʴƒ–…Šſ
    ɐŵ”‰„ɐř
    ˆ—…–‹‘ſ––’Ɏ‡“—‡•–ɛ”‡“—‡•–ƀ—•‡ſɛŽ‡†ƀƇ
    ɛ…‘Ž‘”ʰ‹••‡–ſɛ”‡“—‡•–Şʴ“—‡”›ƃɐ…‘Ž‘”ɐƄƀ
    ţɛ”‡“—‡•–Şʴ“—‡”›ƃɐ…‘Ž‘”ɐƄśɐɤɥɥɥɐŚ
    ɛŽ‡†Şʴ…‘Ž‘”ſɛ…‘Ž‘”ƀŞʴ‘ſƀŚ
    ɛ”‡•’‘•‡ʰɛ”‡“—‡•–Şʴ…”‡ƒ–‡‡•’‘•‡ſƀŚ
    ɛ”‡•’‘•‡Şʴ…‘–‡–ʰ‡™––’Ɏ‡•’‘•‡Ɏ‘–‡–Ɏ–”‹‰ſ
    ɐ‘Ž‘”śɐŜɛ…‘Ž‘”
    ƀŚ
    ”‡–—”ɛ”‡•’‘•‡Ś
    ƈ

    View full-size slide

  45. REACTPHP
    Ƈ
    ɑ”‡“—‹”‡ɑśƇ
    ɑ”‡ƒ…–ŵ”‡ƒ…–ɑśɑɥŜɫŜƋɑ
    ƈ
    ƈ

    View full-size slide

  46. RATCHET
    Ƈ
    ɑ”‡“—‹”‡ɑśƇ
    ɑ…„‘†‡ŵ”ƒ–…Š‡–ɑśɑɥŜɪŜƋɑ
    ƈ
    ƈ

    View full-size slide

  47. SENSOR PHALANX

    View full-size slide

  48. SHIFTOUT()
    ɛ•Š‹ˆ–—–ʰ‡™ ‹”ƒ–ƒɎŠ‹ˆ–—–ſ
    ɛ„‘ƒ”†Şʴ’‹•ƃɯƄř
    ɛ„‘ƒ”†Şʴ’‹•ƃɨɩƄř
    ɛ„‘ƒ”†Şʴ’‹•ƃɨɨƄ
    ƀŚ
    ɛŽ‘‘’Şʴ•‡––‡”˜ƒŽſ
    ˆ—…–‹‘ſƀ—•‡ſɛ•Š‹ˆ–—–ƀƇ
    •–ƒ–‹…ɛ—„‡”ʰɥŚ
    ɛ•Š‹ˆ–—–Şʴ™”‹–‡ſɛ—„‡”ƀŚ
    ‹ˆſʫʫɛ—„‡”ʴɩɬɬƀƇ
    ɛ—„‡”ʰɥŚ
    ƈ
    ƈř
    ɨɥɥɥ
    ƀŚ

    View full-size slide

  49. 7SEG DISPLAYS

    View full-size slide

  50. MAX7219
    8 Digit - 7Segment Display
    8x8 Matrix Displays

    View full-size slide

  51. ɛƒšʰ‡™ƒ”‹…ƒɎŠ‹’ɎƒšɮɩɨɰɎƒ–”‹šſ
    ɛ„‘ƒ”†řɨɨřɨɩřɯ
    ƀŚ
    ɛ†‹•’Žƒ›‘—–ʰɫŚ
    ˆ‘”ſɛ‹ʰɥŚɛ‹ʳɛ†‹•’Žƒ›‘—–Śɛ‹ʫʫƀƇ
    ɛƒšŞʴƒ††‹•’Žƒ›ſɛ‹ƋɯřɥƀŚ
    ƈ
    ɛ‹ƒ‰‡ʰ‹ƒ‰‡…”‡ƒ–‡ˆ”‘’‰ſɏɏɏɏŜɐŵ‡Ž‡’Š’ƒ–ރ‹ƒ–‹‘Ŝ’‰ɐƀŚ
    ɛƒšŞʴ•…”‘ŽŽſɛ‹ƒ‰‡řŞɨɮřɨɬɥƀŞʴ„”‹‰Š–‡••ſɥŜɬƀŞʴ‘ſƀŚ

    View full-size slide

  52. I2C
    ˆ—…–‹‘ſƀ—•‡ſɛŽ‘‘’řɛ„‘ƒ”†ƀƇ
    ɛ•‡•‘”ʰ‡™ƒ”‹…ƒɎŠ‹’ɎɩɎɨɨɬɩſ
    ɛ‹ɩ…ʰ‡™ƒ”‹…ƒɎ ‹”ƒ–ƒɎɩſɛ„‘ƒ”†ƀ
    ƀŚ
    ɛ•‡•‘”
    Şʴ”‡ƒ†ſƀ
    Şʴ†‘‡ſ
    ˆ—…–‹‘ſɛ’”‡••—”‡řɛ–‡’‡”ƒ–—”‡ƀƇ
    ‡…Š‘ɑ”‡••—”‡śɑř—„‡”ɏˆ‘”ƒ–ſɛ’”‡••—”‡řɫƀřɑƒɎɑŚ
    ‡…Š‘ɑ‡’‡”ƒ–—”‡śɑř—„‡”ɏˆ‘”ƒ–ſɛ–‡’‡”ƒ–—”‡řɨƀřɑ†‡‰ɎɑŚ
    ƈ
    ƀ
    ƈ

    View full-size slide

  53. THANKS
    https://joind .in/15483
    https://github.com/ThomasWeinert/carica -chip
    [email protected]

    View full-size slide