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

  3. ARDUINO UNO

    View Slide

  4. ARDUINO MEGA

    View Slide

  5. SHIELDS
    HTTP://SHIELDLIST.ORG/

    View Slide

  6. NETWORK

    View Slide

  7. PROTOTYPE

    View Slide

  8. MOTOR

    View Slide

  9. ARDUINO NANO

    View Slide

  10. NANO ON BREADBOARD

    View Slide

  11. NANO ON BASE

    View Slide

  12. BREADBOARD

    View Slide

  13. BREADBOARD HALFSIZE

    View Slide

  14. BREADBOARD SCHEMA

    View Slide

  15. BREADBOARD IN USE

    View Slide

  16. BREADBOARD IN USE

    View Slide

  17. FRITZING
    http://fritzing.org














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

    View Slide

  18. ARDUINO IDE

    View Slide

  19. View Slide

  20. FIRMATA

    View Slide

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

    View Slide

  22. FIRMATA TEST

    View Slide

  23. FIRMATA TEST PHP

    View Slide

  24. View Slide

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

    View Slide

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

    View Slide

  27. SERPROXY

    View Slide

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

    View Slide

  29. FIRST PROJECT

    View Slide

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

    View Slide

  31. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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






    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  42. CARICA IO
    Event Loop
    Event Emitter
    Promises
    Device Interfaces

    View Slide

  43. EVENT LOOP

    View Slide

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

    View Slide

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

    View Slide

  46. 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

  50. INTERACTION

    View Slide

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

    View Slide

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

    View Slide

  53. INTERACTIVE LED

    View Slide

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

    View Slide

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

    View Slide

  56. COLOR CIRCLE

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  60. SENSOR PHALANX

    View Slide

  61. SHIFTOUT()

    View Slide

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

    View Slide

  63. 7SEG DISPLAYS

    View Slide

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

    View Slide

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

    View Slide


  66. View Slide

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

    View Slide

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

    View Slide