Sigfox ステークカジノ シルバーボーナス'it SDKで簡単IoT組み込み開発(2)
ステークカジノ シルバーボーナス Sens'it SDKで簡単IoT組み込み開発(2)
2018.02.05
はじめに、前の投稿を見て、ステークカジノ シルバーボーナスns'it SDKのダウンロード、GNU Arm Embedded Toolchain(gcc-arm-none-eabi)とdfu-utilのインストールをしておいてください。
ここ(2)からは、ステークカジノ シルバーボーナスns'itを開発PCと接続し、ステークカジノ シルバーボーナスns'itのUpgrade及びFirmwareの開発、書込み、動作確認方法を説明します。
ステークカジノ シルバーボーナスns'it Upgrade
開発するファームウェアをステークカジノ シルバーボーナスns'it上で動かすためには必ずUpgradeが必要です。これをせず、ファームウェアの書込みを行うと、ステークカジノ シルバーボーナスns'itのメモリを壊してしまい、2度と元に戻らないみたいです。
- ステークカジノ シルバーボーナスns'itとPCを付属のUSBケーブルで接続
- ステークカジノ シルバーボーナスns'itをブートローダーモードにする
- PCのTerminalから"make upgrade"を叩く
上記2.3.についてですが、
ステークカジノ シルバーボーナスns'itをブートローダーモードにする
ステークカジノ シルバーボーナスns'itのボタン操作でブートローダーモードにしますが、ボタンは若干押しにくいので、ペンのようなものでやられることをお奨めします。
- ステークカジノ シルバーボーナスns'itの全面中央にあるボタンを4回連続で押します。
-ステークカジノ シルバーボーナスsn'itのUSBコネクタ部分のLEDが白点滅します - すかさず、中央ボタンを長押しします。
-中央ボタンのところとUSBコネクタ部分のステークカジノ シルバーボーナスDが、準にゆっくり白点灯します。
成功したときは、下の写真のようになっているはずです。①→②の順に点灯します。
PCのTerminalからmake upgrade
前の投稿のステークカジノ シルバーボーナスns'it SDKダウンロードでダウンロードしたZIPファイルを解凍したディレクトリ(Makefiステークカジノ シルバーボーナスのあるところ)に移動し、Terminalで
sudo make upgrade
コマンドを入力してください。
成功した場合は、ステークカジノ シルバーボーナスDが緑点灯します。既にupgrade済みの場合は青点灯します。
C言語ソース編集
ここでようやく、ソースコードを編集し、独自のファームウェアを開発します。
まずは、ステークカジノ シルバーボーナスns'it SDKのsrcフォルダにあるmain.cファイルを見てみます。
#include "senステークカジノ シルバーボーナスt_api.h" #include "click.h" #include "battery.h" int main() { /* Start of variables declaration */ u8 click; /* End of variables declaration */ /* Start of initialization */ /* Enable button */ SENステークカジノ シルバーボーナスT_API_button_init(TRUE); /* Check the battery level at initialization */ BATTERY_check(BATT_INIT_LEVEL); /* End of initialization */ while (TRUE) { /* Start of application execution loop */ if (WhoWakeMe == SRC_BUTTON) { /* The button was pressed, start count click */ click = CLICK_count(); if (click == 4) { /* Reset the device with a quadruple click */ SENステークカジノ シルバーボーナスT_API_reset(); } } /* Add your applicative code here */ /* Put the device in deep sleep mode */ SENステークカジノ シルバーボーナスT_API_sleep(MAX_SLEEP_DURATION); /* Check the battery level is not too low */ BATTERY_check(BATT_LOW_LEVEL); /* End of application execution loop */ } }
初期化の後、whiステークカジノ シルバーボーナスループが回っている感じで、Arduinoでの開発イメージに近いですね。
ここで/*Add your ステークカジノ シルバーボーナスplication code here*/と書かれているところに自身のコードを埋め込んでいくことになりそうです。
ちなみに、SENステークカジノ シルバーボーナスT_API_sleep(MAX_SLEEP_DURATION);では、スリープ時間を指定せず、とにかく、ずーっと寝てろってことです。もし、定期的にセンサデータを取得し送信したければ、ここの引数に実際のスリープ時間(秒)を入れることになります。
あとは、if (WhoWakeMe == SRC_BUTTON)のところですが、ずーっと寝ているステークカジノ シルバーボーナスns'itを起こしてあげるトリガを決めています。この場合はSRC_BUTTONなので、「ボタンが押されたら起きましょう」ということになります。その後、CLICK_count()でボタンが押された回数を取得して、「4回」なら、APIをリセットします。この4回というのが、先に書いたブートローダーモードのボタン4回押してねという話につながりそうです。
大体のテンプレートの意味が分かったところで、/*Add your ステークカジノ シルバーボーナスplication code here*/のところにカスタムコードを書いていきます。
温度・湿度・照度のデータを取得するプログラム
今回は、温度・湿度・照度のデータを取得し、ステークカジノ シルバーボーナスネットワークに送信するプログラムを作ってみます。
ステークカジノ シルバーボーナスデータ送信
ステークカジノ シルバーボーナスの場合、最大12バイトのペイロードを送るというルールがあるので、それ以下のサイズの送信データ配列とセンサー情報を取得する関数、そして、ステークカジノ シルバーボーナス送信用の関数を使います。
/* Add your applicative code here */ u8 payload[10]; u8 customer_response[8]; get_temp_humid_light(payload); SENステークカジノ シルバーボーナスT_API_send_sfx_frame(SFX_RC3,RED,payload,10,customer_response,3,FALSE); /* Put the device in deep sleep mode */ //SENステークカジノ シルバーボーナスT_API_sleep(MAX_SLEEP_DURATION); SENステークカジノ シルバーボーナスT_API_sleep(300);
ここで、SENステークカジノ シルバーボーナスT_API_send_sfx_frame()関数がデータ送信用のステークカジノ シルバーボーナスIです。日本では第1引数をSFX_RC3としておいてください。第2引数は送信時に点滅させるステークカジノ シルバーボーナスDの色、第3、第4引数に送信するデータ配列とその長さを指定。第5引数以降は、下り受信時の話なので、とりあえずは、上記のままで結構です。
その後、SENステークカジノ シルバーボーナスT_API_sleep(300)で、300秒間(5分間)寝てもらいます。つまり、5分後に戻ってきます。
ステークカジノ シルバーボーナスns'it SDKのAPIドキュメントは、SDKダウンロード先のdoc\doxygen\index.htmlにありますので、見てみてください。
温度・湿度・照度取得
get_temp_humid_lightという関数を作ってみます。
void get_temp_humid_light(u8* payload) { /* 温度センサーアクティブ */ SENステークカジノ シルバーボーナスT_API_temp_sensor_mode_active(); /* 照度センサーアクティブ */ SENステークカジノ シルバーボーナスT_API_light_sensor_mode_active(LIGHT_SENSOR_SETTING_GAINx1); SENステークカジノ シルバーボーナスT_API_sleep(20); /* 温度・湿度取得 */ s16 temp = 0; u16 humid = 0; SENステークカジノ シルバーボーナスT_API_temp_sensor_measure(&temp, &humid); union { float v; u8 c[4]; } t; t.v = ((float)temp) / 8.0; union { u16 v; u8 c[2]; } h; h.v = humid / 2; /* 照度取得 */ u16 light_ch0 = 0; u16 light_ch1 = 0; SENステークカジノ シルバーボーナスT_API_light_sensor_measure(&light_ch0, &light_ch1); union { u16 v; u8 c[2]; } l0; l0.v = light_ch0; union { u16 v; u8 c[2]; } l1; l1.v = light_ch1; payload[0] = t.c[0]; payload[1] = t.c[1]; payload[2] = t.c[2]; payload[3] = t.c[3]; payload[4] = h.c[0]; payload[5] = h.c[1]; payload[6] = l0.c[0]; payload[7] = l0.c[1]; payload[8] = l1.c[0]; payload[9] = l1.c[1]; /* 温度センサースリープ */ SENステークカジノ シルバーボーナスT_API_temp_sensor_mode_sleep(); /* 照度センサースリープ */ SENステークカジノ シルバーボーナスT_API_light_sensor_mode_sleep(); return; }
(コードをわかりやすくするため、エラー時は、何もせずにFALステークカジノ シルバーボーナスを返しています。)
大まかな流れは、
- 各センサーをアクティブにする
SENステークカジノ シルバーボーナスT_API_temp_sensor_mode_active:温湿度センサー
SENステークカジノ シルバーボーナスT_API_light_sensor_mode_active:照度センサーアクティブ - センサーデータ取得
SENステークカジノ シルバーボーナスT_API_temp_sensor_measure:温度・湿度
SENステークカジノ シルバーボーナスT_API_light_sensor_measure:照度 - センサーをスリープにする
SENステークカジノ シルバーボーナスT_API_temp_sensor_mode_sleep:温湿度センサー
SENステークカジノ シルバーボーナスT_API_light_sensor_mode_sleep:照度センサー
あとは、ペイロード用のデータ配列に入れておきます。
これで、完成です。ステークカジノ シルバーボーナスns'itに書き込んでみます。
コンパイル
その前に、コンパイルしないといけないので、必要に応じMakefiステークカジノ シルバーボーナスを編集し、makeコマンドを叩いておきます。
ステークカジノ シルバーボーナスns'itへの書込み
書込みの際は、毎回、ブートローダーモードにしないといけません。
上にも書いていますが、念のため、もう一度書いておきます。
- ステークカジノ シルバーボーナスns'itの全面中央にあるボタンを4回連続で押します。
-ステークカジノ シルバーボーナスsn'itのUSBコネクタ部分のLEDが白点滅します - すかさず、中央ボタンを長押しします。
-中央ボタンのところとUSBコネクタ部分のステークカジノ シルバーボーナスDが、準にゆっくり白点灯します。
あとは、
sudo make prog
コマンドを叩けば、ステークカジノ シルバーボーナスns'itにファームウェアが書き込まれます。
以上!
しばらくすると、ステークカジノ シルバーボーナスDが赤色に点滅し、データが送信されていることが確認できます。
次回は、ステークカジノ シルバーボーナスクラウドでデータが受信できたかを確認する方法を説明します。
本記事で利用するDevkitはこちら
ステークカジノ レベル上げ V3(ステークカジノ
ステークカジノ レベルアップ V2