head

2017年8月30日水曜日

esp8266, 稼動時間帯設定で連続稼動日の延長テスト




esp8266で消費電力を下げる事例は、ありそうですが検討してみました。
条件付で、電池の連続稼動日を延ばす方法となります。
稼動時間を設定(例: 9-17時)し、稼動時間以外はIoT機能を停止させる事で
消費電力を下げ、連続稼動日数を伸ばす仕組みです。
24時間稼動前程の運用では適用できません、
昼間稼動でのIoT活用で夜間は使用しない場合、

予想としては、日に8時間稼動で消費電力は電源回路周辺は
常時電力を消費するため、1/3以下まで下げる事は不可能と予想されますが、
動作的にはスリープ解除後の回数が減り、消費電力は下がると予想しています。

*1) 現在時刻の調査方法は、複数ありそうですが。NTPに接続して
 取得しています。RTC等の回路追加は無しです。
*2) NTPを起動時に毎回接続した場合、消費電力は増えましたので
 基準時間をRTC memory に保存し、タイマ起動時に計算処理で
 現在時刻を計算する処理も追加しました。



# 稼動時間イメージ




*) 指定時間帯は、active(稼動時間)のみです。


# 条件
a) 24時間稼動は対象外
b) sleep タイマは30分以上の場合はほぼ効果なし。
 想定タイマ: 5-15分
c) 稼動 -開始終了範囲が、0時 - 24時 まで。
d)電源周辺部品
LDO 出力 500mA : TA48M033F
入出力コンデンサ :入力=0.1u, 出力=47u

*) 例は、1日稼動時間= 8H


# 処理
ntp ( udp)を使って、起動時に現在時刻を取得し、稼動判定処理に使っています。
a) 開始終了時刻は、コード内に記載しています。
 *)改良としては、クラウド側から、範囲時刻を取得した方が良さそうです。
b) 稼動時間帯は、数分( 約5-15分)タイマ、30分以上のタイマの場合は、さほど効果ありません。
c) 非稼動時間帯は、60分タイマで、次稼動時間帯開始の監視を行います。



# code (BETA) -arduino IDE 1.8.4
https://github.com/kuc-arc-f/WiFiClient_ntpTest_2

==== Update :2017/08/31 ====
update 0.9.2 を更新しました。
不具合対応で、稼動時間帯の判定処理を修正しました。
=======

*) センサは接続していません。

*) 計測/集計用のコード - arduino/python (参考)
https://github.com/kuc-arc-f/read_adcUART




# 集計/分析
予測計算となります、1時間の実測値をもとに計算しています。
計測は前回の arduino (+電流測定抵抗= 1R)版電流測定機器、
で100mSec(0.1sec)単位で1時間測定、対象 36,000件

*1) 1mA以下の測定ができてないため、
テスタ計測の基板消費電流=0.8 mAを加算しています。
*2) 旧版は、単純なスリープ起動(deep sleep 5分)

a) 新版の 稼動時間帯/ 非稼動の波形


b) 表/ 新版の 稼動時間帯/ 非稼動、
稼動 / 1 時間当りの平均電流値= 2.9447 mAh
非稼動/ 1 時間当りの平均電流値= 1.0609 mAh
稼動 / 24時間当りの平均電流値= 70.6728 mAh
非稼動/ 24時間当りの平均電流値= 40.532  mAh



c) 旧/新 比較。
旧/24時間当りの平均電流値= 63.686 mAh
新/24時間当りの平均電流値= 40.532 mAh
旧/24時間当りの平均電力値= 318.42 mWh
新/24時間当りの平均電力値= 202.66 mWh

*) 電力消費は、旧/新比較= 63.52 % (新は消費が少ない)
終止電圧までの時間、旧/新比較=  1.57 倍(新は連続稼動可能)



d) 消費、累積30日のグラフ



# 考察
改良内容で、予想より消費は下がりませんでした、
50% 以下は期待していましたが。。悪影響は
電源部分の消費が大きく。常時電力を消費している為と
想定しています。
今回は、接続先の thingSpeakの更新時間が長めになっており
消費電力が大めになっていますが、全て同一接続先でテストした為、
比率は変わらないと思います。


# まとめ
将来的には、稼動カレンダ連動で
休日は 非稼動にできると、さらに稼動日数は伸びると思います。



# esp8266まとめ
http://knaka0209.blogspot.jp/2017/06/esp8266-matome.html



2017年8月19日土曜日

BLE 子機 消費電力測定結果 ,RN4020 +atmega (第1回)



連続稼動テストを続けていた、
RN4020 BLE子機の第1回目の、測定報告となります。



#条件
1日 =24時間稼動
タイマー間隔= 300sec (5分)
電池 : 二次電池単三- 2本 (ニッケル水素)
*) 100均さまの、モバイル電源(単三×2本 2.4V)で
 出力= 5V ( おそらく昇圧回路内臓 )
*) BLE server は前回と同じ, nanoPiを経由して
 クラウド連携する構成です。

# 結果
稼動時間 : 1095 H ( 45.6日 )


# 考察
条件としては、やや消費電力は多めとしました。
1) タイマー間隔を、300秒から 10/15分(600秒) 以上に変更すると
 稼動時間は延ばせそうです。
2) 周辺センサの電源を ON/OFF スイッチ機能を、
 追加していない為、やや消費は多めになっています。
3) 小型化の為、電池2本としましたが。昇圧時の電力ロス
 が想定されるので、使用できる電力量は少なめ
 だったと予想しています。

#
次も条件等を変更して、テストしてみたいと思います。


# 関連の記事
RN4020 BLE + ATMEGA328, 省エネ改良版
http://knaka0209.blogspot.jp/2017/07/esp32-21.html

消費電力比較、RN4020 BLE とESP8266
http://knaka0209.blogspot.jp/2017/07/raspi-8.html


# 関連のまとめ
BLE -IOT関連まとめ
http://knaka0209.blogspot.jp/2017/07/BLE-matome.html





2017年8月17日木曜日

Update, BLE gateway server 0.9.2


前回のアドレス指定の BLE gateway sereverの 
update行いました。 ( ble_gateway_sv2)
内容は、コンフィグからデバイスリストを読み込む方法に変更し、
デバイス追加時にコードにの変更を少なめに出来るように修正しました。



#
1) configの設定、
config.json を追加し、各デバイス名/ BDアドレスを記載しておきます(json形式)




*) 記載サンプルは、config-sample.json
*) デバイス名は、キー項目となり。重複名はNGとなります。
*) public addressを事前に調査が必要な点は前回と同じ。

2) コード修正 ( 前回と似ています )
http_func.py --送信先の設定 (* 例は thingSpeak
ble_gateway_sv.py  /send_http()
--request param設定、BLE収集配列から、HTTP送信用のバッファにセットします。
*) 今回は、config.json に記載した デバイス名/field を指定しデータ取り出します。
*) コード内の、BDアドレス定義は削除しています、

# Log には、デバイス名、アドレス、各BLE子機からの読み込み値
が出力されます。





# code
前回と同じプロジェクト URLです。
https://github.com/kuc-arc-f/ble_gateway_sv2



# 関連のページ
# Update, nanoPi BLE gateway server アドレス指定編(ble_gateway_sv2)
http://knaka0209.blogspot.jp/2017/08/nanoPi-4.html

RN4020 BLE + ATMEGA328, 省エネ改良版
http://knaka0209.blogspot.jp/2017/07/esp32-21.html

# 関連のまとめ
BLE -IOT関連まとめ
http://knaka0209.blogspot.jp/2017/07/BLE-matome.html




2017年8月7日月曜日

python ,GATT characteristic通信編


前回のGAP profileベースの advertising通信で
bt4.x プロトコル拡張もほぼ限界に達してきたようですので。
別の方法を検討しました。
GATT profileを使って、characteristic value
をperipheral から読見込みテストを行いました。

[環境]
GATT client/Central : nanoPi (python)
GATT server/peripheral : esp32

*) esp32は、省電力面ではNGでしたが、
 GATTのサンプルコードが存在したので、勉強には良さそうでした。
 連続稼動の場合は、省エネ化できるデバイスに変えたほうが良いでしょう。


# thanks / 参考のサイトさま
GATT(Generic Attribute Profile)概要
http://yegang.hatenablog.com/entry/2014/08/09/195246



# Log -python/ Central
sRead=0000..
の行が、読み込んだ行です。










# Log -esp32 /peripheral
GATT_READ_EVT 、のイベント当りが、
characteristic 読み込み実行された応答部分です。







# code(beta)、解説など

# Central/ GATT client --python (nanoPi)
getCharacteristic.py (bluepy を使用してます。 )
* BDアドレス (public address) を指定し、コネクト
*  characteristic  -UUID を指定します。
mCHAR_UUID = 0xFF01
* properties は、読み込み権限のある場合は、読めました。
* 指定の characteristic  -UUID が存在する場合、
読み込み処理 ( .read()  )を実行すると、valueが取得できました。

https://gist.github.com/kuc-arc-f/b5cd0e6f8f6901922571654d6d33160a


# peripheral /GATT server -esp32
gatts_demo.c --ESP-IDF
*  別タスクで、センサ値等のデバイス値を、変数にセットしておきます。
xTaskCreate(&sensorTask, "sensorTask", 4096, NULL, 5, NULL);

*  characteristic -UUID は固定にしておき、読み込み側で指定します。
#define GATTS_CHAR_UUID_TEST_A      0xFF01
*  callback の ESP_GATTS_READ_EVT で、
送信値をセットし、
esp_ble_gatts_send_response() で送信


https://gist.github.com/kuc-arc-f/b108bdc2306ba77cf59f412612a47737

*) 前回の、BLE Server(IoT連携 )と異なり
GATT部分の通信テストで、peripheral - SCAN処理や
クラウド転送機能は実装していません。



# 関連のページ

Update, nanoPi BLE gateway server アドレス指定編(ble_gateway_sv2)
http://knaka0209.blogspot.jp/2017/08/nanoPi-4.html

nanoPi NEO で、BLE Gateway Server を設置する
http://knaka0209.blogspot.com/2017/07/nanoPi-2.html

# 関連のまとめ
BLE -IOT関連まとめ
http://knaka0209.blogspot.jp/2017/07/BLE-matome.html








2017年8月5日土曜日

Update, nanoPi BLE gateway server アドレス指定編(ble_gateway_sv2)




前回のLinux版の BLE Gateway Server のアップデートを行いました。
改良内容は、プロトコルの拡張となり、1回に送信可能データ桁数を増やしました。
旧版は25byteで、識別に必要なデバイス名を3-5byte、残りの最大20byte
を利用できましたが、
新は、データ部最大 25byte使用可能です。

[改良の仕組み]
Bluetooth device adress(BD address)を使い、server側から、
子機(peripheral)を識別するように。検出方法を変更しています。
この変更により、advertising パケットの最大25 byteを全てデータ領域で
使用できるようになりました。

*) 下記のアドレス種類の例外があり、対象は
public address 機種のみです、random address は対象外としています。



# 概要
旧版(アドレス指定無し)と、同様です。





# 参考 /Bluetooth Device Address

Bluetoothに対応しているデバイスを識別するために使われるのがアドレス:Bluetooth Device Addressで、
BD_ADDR、BDアドレスなどと表記されることもあります。
Bluetooth v4のアドレスは48ビット(EUI-48)を使用しており、
Public AddressとRandom Addressの2種類のアドレスが使用可能です。

・Public Address
これはIEEE 802準拠のアドレスであり、EthernetのMACアドレスと同等のアドレスです。
製品製造時に機器ごとに書き込まれる固定のアドレスです。
機器を製造した企業や機器の個別アドレスを含みます。

*)
48ビットのアドレス
パブリック・デバイス・アドレスは、Bluetooth SIGが企業ごとに発行した24ビットの識別子と、
企業が製品1つづつに割り振る24ビットの識別子から構成されます。

・Random Address
セキュリティを考慮した、各端末(機器)で自動生成される端末アドレスです。
乱数を使います。Bluetooth v4では一般的で、機器の製造工程で書き込む必要がありません。


参考:
http://micro.rohm.com/jp/techweb_iot/knowledge/iot02/s-iot02/04-s-iot02/2732




# code (BETA)
central : nanoPi/ ble_gateway_sv2
https://github.com/kuc-arc-f/ble_gateway_sv2

peripheral : RN4020 +atmega
RN4020_sv2_0_9_1.ino
https://gist.github.com/kuc-arc-f/727cf086673ad33eaf1f6d9055cd3f0d

RN4020_sv2_0_9_3.ino
https://gist.github.com/kuc-arc-f/d2408ff3752d8023db81b33baf2555f0


==== 2017/08/06 ====
esp32 driver(ESP-IDF)
app_bt.c
https://gist.github.com/kuc-arc-f/93a175c7821331f0e0d4934579acd972

=== Update:2017/09/07 ===
update: 0.9.3 scan動作の変更等
http://knaka0209.blogspot.jp/2017/09/nanoPi-8.html

=== Update:2017/08/17 ==
update v0.9.2をリリースしました。
設定ファイルから、子機デバイス情報を設定可能になりました。
blog: http://knaka0209.blogspot.jp/2017/08/nanoPi-6.html

========


# 補足/プロトコル 新/旧比較


新verは、旧と比較してプロトコル仕様が異なり、互換性がありません。
25 byte 固定 (例は、5byte * 5 項目)
device nameを廃止
BD address を追加

V2/ プロトコル仕様(PDF)
https://github.com/kuc-arc-f/ble_gateway_sv2/blob/master/doc/Protocol-Spec-ble-Rn4020-pubAddr.pdf


#  V2/ 設定手順
#) public address の調査
BT アプリ等で、起動時の advertising データ内の BD address を確認します。



===2017/08/06 ===
BTアプリによって、アドレス英数の大文字/小文字が逆になる現象を発見しました。
bluepyは、アドレス英数文字は全て小文字表示のようですので、
チェック用の python 追加しました。必要あれば参考下さい。
scan5-checkAddr.py
https://github.com/kuc-arc-f/ble_gateway_sv2/blob/master/ble_gateway_sv2/scan5-checkAddr.py

=========


#) address メモしておきます。(参考)
複数デバイスを設置する場合ですが、
 *) 例、表形式にまとめておきます。
内容は、BD Addres , 用途、センサ種類



#) BLE server に設定します。
ble_gateway_sv2.py
=== 2017/08/23 ===
update 0.9.2 で、デバイス追加方法を変更しています。
http://knaka0209.blogspot.jp/2017/08/nanoPi-6.html
====

定数を追加し、デバイス追加処理 ( init_param()  ) 
で追加します。
*) 下記の mPubAddr01



旧版のREADME 手順と重複しますが
https://github.com/kuc-arc-f/ble_gateway_sv/blob/master/README.md
http_func.py --送信先の設定 (* 例は thingSpeak 
ble_gateway_sv.py  /send_http() 
--request param設定、BLE収集配列から、HTTP送信用のバッファにセットします。

完了したら、server 起動します。

# Log /クラウド転送が開始されます。
*) 今回は、2台で各1項目で 種類少なめですが。






# NANOPI NEO で、BLE GATEWAY SERVER を設置する
http://knaka0209.blogspot.com/2017/07/nanoPi-2.html

# Update, BLE gateway server 0.9.2
http://knaka0209.blogspot.jp/2017/08/nanoPi-6.html


# BLE -IOT関連まとめ
http://knaka0209.blogspot.jp/2017/07/BLE-matome.html


2017年8月2日水曜日

nanoPi ,BLE gateway Server 負荷テスト (第1回目)



前回のnanoPi gaetway Sererの子機の台数を増やして、
Server 負荷テストを行いました。6台までですが 
デバイス不足の為、esp32 のBLE子機も追加しています。

内訳:
RN4020 : 2台 スリープ= 300sec(5min)
esp32 : 4台 スリープ無 (負荷上げる為、連続BLE送信処理)

結果的として、複数台からの受信/転送処理を
問題なく処理できました。同時受信の負荷を高くしてテストを行いましたが
実際には、スリープ駆動(5/10 分以上)を想定している為。同時アクセス数は
少なめを予想していますので、上記より子機を増やしても
サーバ処理的には耐えられそうな予想はできました。(10 -20台程度)


# Log



# esp32(ESP-IDF) - Code
RTOS版です、
RN4020 ,Nコマンドと同様のGap profile仕様に修正しています。
AD type (Advertising Data Type)= 0xFF( Manufacturer Specific Data )
https://gist.github.com/kuc-arc-f/4e59b01c22f0a09874f7e9bfdcae3072

*) 参考、Bluetooth SIG/ Generic Access Profile
https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile


# 関連のページ
NANOPI NEO で、BLE GATEWAY SERVER を設置する
http://knaka0209.blogspot.com/2017/07/nanoPi-2.html

#BLE -IOT関連まとめ
http://knaka0209.blogspot.jp/2017/07/BLE-matome.html


google colaboratory お試し編 、GPUも使える機械学習の環境構築

前回続き、機械学習の関連となります。 開発環境まわりの内容となり。先人様の情報を元に調査しました。 google colab(google colaboratory) を試してみました。機械学習系の いくつかのライブラリがインストール済みで、 クラウド上で、ある程度機械学...

AD-parts

Shop
Bluetooth搭載
ベース基板

Social