Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
実験から量産までMicroPythonで動く! IoTセンサー Degu(デグー) を作った話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Hiroaki OHSAWA@keimei
May 11, 2019
Programming
920
1
Share
実験から量産までMicroPythonで動く! IoTセンサー Degu(デグー) を作った話
PyCon mini Sapporo 2019
@keimei
Hiroaki OHSAWA@keimei
May 11, 2019
More Decks by Hiroaki OHSAWA@keimei
See All by Hiroaki OHSAWA@keimei
FlutterGakkai モバイルでもPCでもない?Flutter対応のハードウェアを作るってどういうこと?
ohsawa
1
420
Other Decks in Programming
See All in Programming
「なんか〇〇ライブラリで脆弱性あるみたいなんだけど。。。」から始める脆弱性対応 / First Steps in Vulnerability Response
mackey0225
2
130
AgentCore Optimizationを始めよう!
licux
3
260
サークル参加から学ぶ、小さな事業の回し方
yuzneri
0
210
リセットCSSを1行消したらアクセシビリティが向上した話
pvcresin
4
520
20年以上続くプロダクトでも使い続けられる静的解析ツールを求めて
matsuo_atsushi
0
150
ローカルLLMでどこまでコードが書けるか / How much code can be written on a local LLM
kishida
2
380
cloudnative conference 2026 flyle
azihsoyn
1
200
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
1
260
ふにゃっとしない名前の付け方 〜哲学で茹で上げる、コシのあるソフトウェア設計〜
shimomura
0
120
TypeSpec で繋ぐ複数プロダクトの型安全
maroon8021
1
130
柔軟なPDFレイアウトエディタを支える型システム設計 — Discriminated UnionとConditional Typeの実践
minako__ph
2
210
AI駆動開発勉強会 広島支部 第一回勉強会 AI駆動開発概要とワークショップ
hayatoshimiu
0
260
Featured
See All Featured
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
61
44k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
140
Prompt Engineering for Job Search
mfonobong
0
310
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
370
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
180
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
300
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
230
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Test your architecture with Archunit
thirion
1
2.2k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
180
Transcript
実験から量産までMicroPythonで動く! IoTセンサー Degu(デグー) を作った話 PyCon mini SAPPORO 2019 powered by
Degu Project h ps://open-degu.com 1
ABOUT MYSELF 大澤啓明 (おおさわ ひろあき) / @keimei 株式会社アットマークテクノ -ソフトウェアエンジニア:2012- Langages:
C, Python,JS,Shell Script Fun! : Linux Kernel, Zephyr OS, 3D Prin ng/Modeling h p://github.com/ohsawa 2
もくじ Degu(デグー)の紹介 センサーからクラウドまでデータを届ける仕組み AWSでの利用例 MicroPythonをポーティングする話 3
オープンソースプロジェクト 4
Degu デグー ? 齧歯目ヤママアラシ亜目デグー科 Octodon degus 集団行動する 鳴き声でコミュニケーションする 賢くて人になつく Osmák
degu.jpg” by Trustseal is licensed under CC BY-SA 4.0 h ps://commons.wikimedia.org/wiki/File:Osm%C3%A1k_degu.jpg 5
賢いセンサーデバイスっぽい Osmák degu.jpg” by Trustseal is licensed under CC BY-SA
4.0 h ps://commons.wikimedia.org/wiki/File:Osm%C3%A1k_degu.jpg 6
Degu ベースボード 7
Degu ベースボード + センサー 8
Deguが実現するネットワーク 9
広域通信可能なメッシュネットワーク規格 Thread®を採用 省電力 長距離通信も数でカバー メッシュは自動構築 ベースは実績あるIEEE802.15.4 10
ファームウェアも回路図も全部オープン 回路図: h ps://github.com/open-degu/hardware ファームウェア: h ps://github.com/open-degu/degu 11
それ PyConと何の関係あるの? 12
MicroPython対応 PCと繋ぐとUSBメモリとして認識(FAT12) main.py を保存すると自動実行 main.py が無ければUSBコンソールでインタプリタも使える path = 'thing/' +
zcoap.eui64() reported = {'state':{'reported':{}}} addr = zcoap.gw_addr() port = 5683 cli = zcoap.client((addr, port)) while True: reported['state']['reported']['message'] = 'OK' cli.request_post(path, ujson.dumps(reported)) time.sleep(5) cli.close() 13
MicroPython Python3系の組込み向け実装 h ps://micropython.org/ このあたりが話題? 14
SampleCode (明るさセンサー) 前半:ADCからのデータ取得 from machine import ADC import zcoap import
time import ujson def light_sensor(): ADC_REF = 0.6 ADC_RESOLUTION=4096 ain = ADC(0) raw = ain.read() v = (raw / ADC_RESOLUTION) * ADC_REF * 6 return v 15
SampleCode(明るさセンサー) 後半:データ送信 if __name__ == '__main__': path = 'thing/' +
zcoap.eui64() reported = {'state':{'reported':{}}} addr = zcoap.gw_addr() port = 5683 cli = zcoap.client((addr, port)) while True: light = round(light_sensor(), 2) reported['state']['reported']['light'] = light cli.request_post(path, ujson.dumps(reported)) time.sleep(1) cli.close() 16
Grove センサー対応 seeed studioが開発、 販売しているセンサーモジュール(200種類以上!) 17
スターターキットも販売中 h ps://open-degu.com/products.html#purchase 18
カンタン接続 センサーに付属のケーブルで差し込むだけで接続完了 19
対応するセンサーの例 これ、ぜんぶPythonで読めちゃいます。 温度、湿度、気圧 3軸加速度、ジャイロ 煙、ガス(CO2, 硫化物), アルコール カラーセンサー 光センサー 感圧センサー
角度(ボリュームつまみ) 20
対応するセンサーの例 ... 電流 リレー(AC250Vをスイッチ) 振動センサー etc.. ブザー 汎用ネジ止めターミナル(アナログ、デジタル) 21
そのまま使えるサンプルコード main.pyとしてそのまま配置できます。 h ps://github.com/open-degu/micropython-sampple 22
ハードウェアスペック CPU : ARM Cortex-M4 64MHz RAM: 256KB, ROM:1MB (内ファームウェア440KB)
これだけのスペックで実現できます FATファイルシステム、USB Mass Storage IP, UDP, CoAP, DTLS マルチプロセスなRTOS(Zephyr) MicroPython OpenThread(無線メッシュ制御).... 23
クラウドとの接続の手順 ゲートウェイにAWSのアカウントのIAMを書いて QRコードを撮るだけ h ps://open-degu.github.io/user_manual 24
登録後の使い方 25
AWS IoT ルールの追加 26
AWS IoT ルールの追加 27
AWSの表示と設定 28
AWS IoTへのルール設定 SELECT state.reported.battery as battery, state.reported.temp as temp,state.reported.pres as
pres, state.reported.humid as humid, timestamp() as time FROM "$aws/things/degu-barometer2/shadow/update" MQTT経由でPublishされた下のJSONをSQLライクな構文でフィル タできる { "reported": { "message": "OK", "battery": 4.742719 } } 29
AWS IoTへのアクション設定 30
Elas cSearch->Kibanaでの表示 31
デモの様子 32
照度とライトの連携 33
気圧と温度の可視化 34
ファームウェアの構成 MicroPython ユーザースクリプト Zephyr OS OpenThread 通信ミドルウェア Zephyr Linux Founda
onのRTOSプロジェクト OpenThread Google傘下のNestが公開しているオープンなメッシュ通信実装 下回りはIEEE802.15.4(Zigbeeと一緒) 35
MicroPython Project 「Zephyr OSに対応しています!」 Zephyr Project 「OpenThreadの通信に対応しています!」 36
MicroPython Project 「Zephyr OSに対応しています!」 Zephyr Project 「OpenThreadの通信に対応しています!」 Degu 「...あれ?3つくっつけるんですか?」 37
やること Zephyrのビルドシステムとの戦い Autotoolsの依存関係の調整 無駄な機能の削除(サイズ削減) 足りない機能の追加 MicroPythonのクラスモジュールを追加して ハードウェアにアクセスできるようにする 38
#import ADC するのために‥ まだまだ.. const mp_obj_type_t machine_adc_type = { {
&mp_type_type }, .name = MP_QSTR_ADC, .print = machine_adc_print, .make_new = machine_adc_make_new, .locals_dict = (mp_obj_t)&machine_adc_locals_dict, }; mp_obj_t machine_adc_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { ... RAISE_ERRNO(adc_channel_setup(self->dev, self->cfg)); return (mp_obj_t)self; } 39
こちらでやっておきました。 40
これだけで電圧が測定できます。 from machine import ADC ain = ADC(0) 41
まとめ なぜセンサープラットフォームを作ったのか 相性問題や量産調達、クラウドまで動作確認するのは大変 自由なスクリプティングと小さなデバイス 簡単にコードを書いてほしいのでMicroPythonを選択= クラウドプラットフォームへの対応 AWS IoT Coreに標準対応 (Azure
IoT Hub対応予定) 42
有り難うございました! 43
44