4
Most read
7
Most read
8
Most read
常田 裕士
OpenThread/nRF52811調査(仮)
目次
• OpenThreadとは
• OpenThreadを構成する
サーバーソフトウェア(Border Router)
• OpenThreadプログラミング
• NRF52811/MDBT42-192Kについて
OpenThreadとは
• ThreadはGoogle(Alphabetグループ)傘下のNest
Labsが開発したIoT家電の通信仕様
• そのオープンソース実装がOpenThread
• IEEE802.15.4, 6LoWPAN(IPv6), CoAPなどのオープ
ン標準の上に実装されている。
• GoogleからThread搭載スマートディスプレイの
Nest Hub Maxが9/10に発売された。
Threadネットワークの構成
マイコン
(Cortex-M4など)
IEEE802.15.4/6LoWPAN
(低速な無線通信)
Edge Router
(RasPiなど)
Internet
IPv6
(みんな使ってないやつ)
6LoWPAN/IPv6を使っているので、マイコン
にグローバルのv6のIPアドレスが割り振ら
れ、インターネット上のホストとEnd-to-End
で通信ができる。
何が嬉しいのか?
• IPv6で直接通信ができるため、
アプリケーション・ゲートウェイを立てる必要がない。
• BLEで通信する場合には、BLE網のノードから集めたデータを
取りまとめてサーバーに送る中継機能を、システムごとに作る必要がある
• OpenThreadであれば、マイコンがIPv6通信でサーバーやクラウドと通
信するので、ネットワーク構築だけでOK
OpenThreadのプロトコルスタック
IEEE802.15.4
6LoWPAN(IPv6)
UDP/DTLS
CoAP
(IEEE802.15.4, 6LoWPANでない)
OpenThread固有の機能は主に認証
などネットワークへの参加にかかわ
るところ。
MeshCoPというUDP/DTLS上で動作す
る独自のプロトコルで行っている。
OpenThread
の配布物
OpenThread
• マイコンで動くOpenThreadの実装
Wpantund
• LinuxでOpenThread通信を行うためのアダプ
タとの接続機能
otbr-posix
(OpenThread Border-Router)
• InternetとOpenThreadのネットワークを中継
する
Border Routerの機能
OpenThread BorderRouterの構成
IPv6 Network
Thread
Network
OpenThread
BorderRouter
NCP(Adapter)
wpantund
Net IF
otbr-agent
otbr-web browser
External
Commissioner
(Android)
メインの機能はThreadと
IPv6の中継(縦のライン)
ブラウザやAndroidアプリから、Threadネッ
トワークへ追加する端末を指示できる
OpenThread配布物の
debian package
• 作った。
https://launchpad.net/~soburi/+archive/ubuntu/openthread-tools
• Debianパッケージなので、Raspbianからも使える!
OpenThreadプログラミング
• SDK
• 基本機能だけだとOSないから、しんどい。
• 一応、PingやUDPパケットを流すCLIのサンプルとかはある。
OT-RTOS
• FreeRTOSにOpenThreadを組み込んだパッケージ
• https://github.com/openthread/ot-rtos
• これもOpenThreadのプロジェクトの配布物のひとつ
• lwip(Lightweight IP、マイコン向けのTCP/IP実装)も
組み込んでいて、Linuxのネットワークプログラミングと
ほぼ同様にプログラムが書ける。(socket APIが使える)
• マルチタスクができる!
プログラム例
int main(int argc, char *argv[])
{
otrInit(argc, argv); //openthread初期化
otCliUartInit(otrGetInstance()); //cli初期化
otrUserInit(); //ユーザータスクル初期化、開始
otrStart(); //openthreadタスク開始
return 0;
}
void demo101Task(void *p)
{
OT_API_CALL(otIp6SetEnabled(
otrGetInstance(), true));
// セマフォでopenthreadと排他してAPIを呼び出す
...
OpenThreadタスクと協調動作するように
マルチスレッドを意識した組み込みプログラミング
Adafruit
nRF52
Arduino
• AdafruitのnRF52向けのArduinoパッケージ
• Adafruit Feather nRF52840
Express(https://www.adafruit.com/pro
duct/4062) などで使える。
• Arduinoの基本機能が動作する(当然だが)
• 中身はFreeRTOSを使って実装されている
Integration
FreeRTOS
OpenThread
Task
User
Task
FreeRTOS
Main
Task
Other
Task
Arduino
Program
OT-RTOS NRF52 Arduino
Integration(あるいはニコイチ)
FreeRTOS
OpenThread
Task
Main
Task
Other
Task
Arduino
Program
もともと同じ​Free​RTOSで動いていたプログラムな
ので、素直にくっつく。
TCP/UDP
API
• OT-RTOSではLWIPを組み込んでいて、
ネットワークAPI(Socket API)が使える。
• arduino-
esp32(https://github.com/espressi
f/arduino-esp32)
でも、LWIPを使っていて、LWIPに対応した
ArduinoのTCP/UDP APIの実装がある。
• 適当に持ってくる→動いた!
OPENTHREAD API
• さすがにArduino向けのOpenThread APIは存在しないので適当に作った。
• 2種類のAPIを用意
• Low-level APIはOpenThreadのAPIのラッパー
• High-level APIとして、CLIコマンドに相当するAPIを作成
• ほとんどはOpenThread APIを呼び出しているだけ。
• Arduino Friendlyになるようにうまいことやる。
結果
• Arduinoの標準相当のTCP/UDP APIで
OpenThreadプログラムが書けるようになった。
• OpenThreadのノウハウも必要だが、
ログインの場面など限定的。
• パッケージ配布がまだできていない。(準備中)
NRF52811
• NordicSemi先生の最新作
• NRF52840の廉価版
• mouserではnRF52840は¥387、nRF52811は¥235。(1000個時)
• Thread対応
• NRF52840と比べると、USB機能がないのが大きな違い。
• あとはメモリとFlashが少ない。
• デバッグ用のRTT Trace(SWO)がない。など。
MDBT42-192K
• 台湾Raytac製の技適付きnRF52811モジュール。
• 日本でもモジュールで入手性が良い。(小売りで買える)
• nRF52840もモジュール(MDBT50Q)と違って、基板端面に端子が出ているの
で、手ハンダできる(気がする)
剝いてみた
シールドの缶を外したところ。
Nordicのリファレンス通りの回路。
焼いてみた
• 試作Breakout基板1号。
• リファレンス回路通りにDCDC用のインダクタと
32kHzの水晶のパターンは引いておく。
未実装でも可
• UARTとBlackmagicProbe用の端子を
引き出した。基板割るとここだけ使えなくなる。
• パスコンのサイズ間違えたw
• Vカットのオーダーミスったww
書いてみた...?
CPUIDは読めるけど、メモリが読めない?
https://devzone.nordicsemi.com/f/nordic-q-a/51109/unable-to-connect-to-the-
nrf52811-via-nrf-connect-programmer/205035#205035
it seems nRFConnect doesn't support the nRF52811 as of yet.
まだ未対応らしい。
Fin.
tokita.hiroshi@gmail.com

More Related Content

PPTX
いまどきの組込みOSの​ ZephyrRTOSと​ OpenThreadを​ Arduino環境で遊んでみる
PPTX
ARM LinuxのMMUはわかりにくい
PDF
ソフトウェアテストの歴史と近年の動向
PDF
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
PDF
ZigBee/IEEE802.15.4について調べてみた
PDF
ゼロから始める転移学習
PDF
さくらのクラウド基礎知識
PPTX
今さら聞けない人のためのDevOps超入門
いまどきの組込みOSの​ ZephyrRTOSと​ OpenThreadを​ Arduino環境で遊んでみる
ARM LinuxのMMUはわかりにくい
ソフトウェアテストの歴史と近年の動向
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
ZigBee/IEEE802.15.4について調べてみた
ゼロから始める転移学習
さくらのクラウド基礎知識
今さら聞けない人のためのDevOps超入門

What's hot (20)

PPTX
各OSにおいて、OpenCVをpythonから使う方法
PDF
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
PDF
オンラインゲームの仕組みと工夫
PPTX
なぜコンピュータを学ばなければならないのか 21世紀の君主論
PPTX
Python 学習教材 (~299ページ)
PDF
ソフトウェアテスト入門
PDF
良い?悪い?コードコメントの書き方
PPTX
OpenMPI入門
PDF
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
PDF
磯野ー!関数型言語やろうぜー!
PDF
自然言語処理による議論マイニング
PDF
ChatGPT の現状理解と 2023年7月版 LLM情報アップデート
PDF
UniRx完全に理解した
PDF
Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...
PPTX
Bluetooth meshの基礎
PDF
Decision Transformer: Reinforcement Learning via Sequence Modeling
PDF
OutSystems ユーザー会 セッション資料
PDF
Python入門 : 4日間コース社内トレーニング
PDF
Pcapngを読んでみる
PDF
ChatGPT 人間のフィードバックから強化学習した対話AI
各OSにおいて、OpenCVをpythonから使う方法
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
オンラインゲームの仕組みと工夫
なぜコンピュータを学ばなければならないのか 21世紀の君主論
Python 学習教材 (~299ページ)
ソフトウェアテスト入門
良い?悪い?コードコメントの書き方
OpenMPI入門
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
磯野ー!関数型言語やろうぜー!
自然言語処理による議論マイニング
ChatGPT の現状理解と 2023年7月版 LLM情報アップデート
UniRx完全に理解した
Prometheus monitoring from outside of Kubernetes
 〜どうして我々はKubernetes上のPromet...
Bluetooth meshの基礎
Decision Transformer: Reinforcement Learning via Sequence Modeling
OutSystems ユーザー会 セッション資料
Python入門 : 4日間コース社内トレーニング
Pcapngを読んでみる
ChatGPT 人間のフィードバックから強化学習した対話AI
Ad

More from 裕士 常田 (10)

PPTX
WeblateでOSSの翻訳に参加する
PPTX
Node native ext
PPTX
Arduino library の作り方 2020
PPTX
BlackMagic ProbeでARMをデバッグする
PPTX
HKマスクを作ってみた
PDF
Arduino compatible layer (with 6LoWPAN) on Contiki
PDF
KiCadで雑に基板を作る チュートリアル
PPTX
Mft2014 defeated
ODP
DVB recording command on gstreamer.
PDF
Traveltoitalia
WeblateでOSSの翻訳に参加する
Node native ext
Arduino library の作り方 2020
BlackMagic ProbeでARMをデバッグする
HKマスクを作ってみた
Arduino compatible layer (with 6LoWPAN) on Contiki
KiCadで雑に基板を作る チュートリアル
Mft2014 defeated
DVB recording command on gstreamer.
Traveltoitalia
Ad

Openthread / nrf52811 調査(仮)