miso が 2024年02月01日19時12分16秒 に編集
初版
タイトルの変更
AE-TYBLE16を使ってボタン電池で長期動作可能なiBeacon開発ボードを作ってみた
タグの変更
AE-TYBLE16
nRF51822
Arduino
メイン画像の変更
記事種類の変更
製作品
本文の変更
# AE-TYBLE16の中身はnRF51822 秋月で購入してから早数年・・・・・・積み基板として余生を過していたこのマイコン。放置しているのは勿体ない、Ultra Low Power Modeで5μAの消費電流を実現出来てBLEも使える。 ![キャプションを入力できます](https://camo.elchika.com/67d8c48546a789c60b2f68a6717fbf4e367611a1/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32646132616164352d373663382d343562642d393434382d3262306431663736653138352f63396134313732652d313563322d346236332d616263342d356330353736333839643866/) 現実逃避のため、実験用の開発ボードの製作を行なった。 # 参考にしたサイト [AE\-TYBLE16をArduinoIDEで使う\(JLinkなしでBluetooth接続まで\) \#ArduinoIDE \- Qiita](https://qiita.com/KameLong/items/5e7e61f44d4e7a74539c) # Arduino IDEのセットアップ 基本的には参考サイトと殆ど同じなので、以下同様の流れなので割愛。 1. arduino-nRF5を導入 2. nRF5FlashSoftDeviceを導入 3. s130_nrf51_2.0.1_softdevice.hexを導入 4. system_nrf51.cを修正し # 今回作成したiBeacon向けの開発ボード ボタン電池で動くようにしてます。詳細は割愛。 ![キャプションを入力できます](https://camo.elchika.com/5c20d813ff429a33e3885f7bc6903403e121a86d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32646132616164352d373663382d343562642d393434382d3262306431663736653138352f64646437336538322d373139342d346430662d383233302d303832303362373462343164/) # とりあえずiBeaconとしての動作確認 nRF Connect for Desktop Bluetooth Low Energyで動作確認、ちゃんとUUID見えてるのでOKそうです。 ![キャプションを入力できます](https://camo.elchika.com/338f22dcb63e14516ce53aa373a556fbcb7163f7/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32646132616164352d373663382d343562642d393434382d3262306431663736653138352f65663165336162372d383733612d346534332d383739362d616233346636333466633362/) # 転がっていたiBeaconのコードそのまま [ae\-tyble16\-beacon\-arduino/beacon/ibeacon/iBeacon\.ino](https://github.com/MypaceEngine/ae-tyble16-beacon-arduino/blob/master/beacon/ibeacon/iBeacon.ino) をそのまま動かしたところ平均4.81mAと相当厳しい感じでした。これをそのままボタン電池で使うのは(ry ![キャプションを入力できます](https://camo.elchika.com/661f8702f05807bb7d966ae21aca1cc01ec732f2/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32646132616164352d373663382d343562642d393434382d3262306431663736653138352f61666637313165622d656633652d343736662d383535632d666666376235353766343534/) # 最適化して Ultra Low Power Mode & ビーコン間隔を延ばした 平均11.85μAとなり満足。これならボタン電池でも余裕だ。 ![キャプションを入力できます](https://camo.elchika.com/c1b50ac08ef4b3fd70fc1ea25c2a0e28f8d3f2ce/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32646132616164352d373663382d343562642d393434382d3262306431663736653138352f34306565383466362d663536622d346332302d383164382d303938626665376636346535/) # 最終的なコード ``` #include <BLEPeripheral.h> #include <iBeacon.h> #include "nrf_soc.h" #include "nrf_nvic.h" iBeacon beacon; void setup() { char* uuid = "a196c876-de8c-4c47-ab5a-d7afd5ae7129"; unsigned short major = 0; unsigned short minor = 0; unsigned short measuredPower = -55; beacon.setAdvertisingInterval(5000); beacon.begin(uuid, major, minor, measuredPower); sd_power_mode_set(NRF_POWER_MODE_LOWPWR); sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE); // This saves power } void loop() { beacon.loop(); // Enter Low power mode sd_app_evt_wait(); // Exit Low power mode // Clear IRQ flag to be able to go to sleep if nothing happens in between sd_nvic_ClearPendingIRQ(SWI2_IRQn); } ```