レンタルサーバーと連携したsakura.ioの運用例
Dependencies: mbed SakuraIO MPU9250_SPI BME280 gps AQM0802A
Revision 1:11957db1faa5, committed 2018-11-22
- Comitter:
- punix
- Date:
- Thu Nov 22 08:09:12 2018 +0000
- Parent:
- 0:d2c4ee597498
- Child:
- 2:48e7e85cb169
- Commit message:
- ??????
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Nov 21 08:54:34 2018 +0000
+++ b/main.cpp Thu Nov 22 08:09:12 2018 +0000
@@ -7,6 +7,7 @@
#include "sensors.h"
#include "gps.h"
+//LED制御メッセージのタイプ種別の定数
#define MESG_NORMAL 0
#define MESG_INIT 1
@@ -52,6 +53,9 @@
// GPS UART buffer
char uart_buffer[128] = {0};
int uart_buffer_index = 0;
+
+//LED応対s申告の為のLTE接続した直後を検出するためのフラグ
+// 0:切断、1:接続直後でLED情報送信中、2:LED状態到達確認済み
int connected_now = 0;
// NMEA Decoder
@@ -176,15 +180,25 @@
return;
}
else {
+ //ON_LINEだったとき
if(0 == connected_now){
+ //接続直後(直前までオフラインだった)時
+
+ //現在のLED状態を申告する送信
tx_tmp = (MESG_INIT << 8) | (lcd_led & 0xFF);
sakuraio.enqueueTx(20, tx_tmp);
sakuraio.send();
+
+ //接続直後でLED情報送信中
connected_now = 1;
+
+ //過去の送信カウント数クリアと、Offlineになってしまった液晶のsend再表示の為
stat_sw5 = -1;
}
if(1 == connected_now){
+ //現在のLED状態を申告に対する応答がプラットフォームから帰ってきてない時
if((tick_by_200ms % RETRY_INTERVAL_TICKS_PAR_COUNT) == 0){
+ //一定時間経過していたら再度LED状態を申告
tx_tmp = (MESG_INIT<<8) | (lcd_led & 0xFF);
sakuraio.enqueueTx(20, tx_tmp);
sakuraio.send();
@@ -194,7 +208,7 @@
-
+ //スイッチ状態が切り替わった時、もしくは、LTE接続が一旦切れて復帰した時
if (stat_sw5 != sw_5) {
stat_sw5 = sw_5;
led_3 = stat_sw5; //State: `Send Enable'
@@ -210,6 +224,7 @@
}
if (stat_sw5 == 1) {
+ //送信スイッチONの時。送信処理開始
if ((tick_by_200ms % SEND_INTERVAL_TICKS_PAR_COUNT) == 0) { //Send data intarval is 5 minutes.
pc.printf("\r\n\r\n--------------------\r\n");
read_sensor_data();
@@ -249,32 +264,59 @@
}
}
+ //受信確認処理
do {
rx_available = 0;
if ( CMD_ERROR_NONE == sakuraio.getRxQueueLength(&rx_available, &rx_queued)) {
+ //getRxQueueLengthが成功したとき
if (0 < rx_queued) {
+ //sakura.ioモジュールの受信キューにデータが入っているとき
+ //キューからひとつデータを取り出す
if ( CMD_ERROR_NONE == sakuraio.dequeueRx(&rx_ch, &rx_type, rx_value, &rx_offset)) {
+ //正常に受信キューからデータを取り出せたとき
if ( (20 == rx_ch) && (0x49 == rx_type) ) {
+ //LED状態の要求、もしくは、LED状態申告の回答のとき
+
+ //受信した32bit整数値が、8bit値が4つの配列になって届くので、ひとつの整数値に整形
rx_val = ( (int64_t)rx_value[3] << 24) + ( (int64_t)rx_value[2] << 16) + ( (int64_t)rx_value[1] << 8) + ( (int64_t)rx_value[0] << 0);
+
+ //受信した32bit値からbitmapに従ってそれぞれの情報の切り出し
ch20_ctrl = rx_val & 0xFF;
ch20_mesg = (rx_val>>8) & 0xFF;
ch20_id = (rx_val>>16) & 0xFFFF;
+
+
if ( (1 == ch20_ctrl) && (MESG_NORMAL == ch20_mesg)) {
+ //LED状態の要求だったとき
tx_tmp = (ch20_id<<16) | (MESG_NORMAL<<8) | (lcd_led & 0xFF);
sakuraio.enqueueTx(20, tx_tmp);
sakuraio.send();
}
if ( (1 == ch20_ctrl) && (MESG_INIT == ch20_mesg)) {
+ //LED状態申告の回答だったとき
+ //フラグを進めて、LED状態到達確認済みとし、再送処理を止める
connected_now = 2;
}
}
if ( (21 == rx_ch) && (0x49 == rx_type) ) {
+ //LED設定のとき
+
+ //受信した32bit整数値が、8bit値が4つの配列になって届くので、ひとつの整数値に整形
rx_val = ( (int64_t)rx_value[3] << 24) + ( (int64_t)rx_value[2] << 16) + ( (int64_t)rx_value[1] << 8) + ( (int64_t)rx_value[0] << 0);
+
+ //受信した32bit値からbitmapに従ってそれぞれの情報の切り出し
ch20_ctrl = rx_val & 0xFF;
ch20_mesg = (rx_val>>8) & 0xFF;
ch20_id = (rx_val>>16) & 0xFFFF;
+
+
if ( 1 == ch20_ctrl || 0 == ch20_ctrl ) {
+ //LED制御値が、0(OFF) or 1(ON)だったとき
+
+ //LEDに制御値を設定
lcd_led = ch20_ctrl;
+
+ //設定後の値をプラットフォームへ返送
tx_tmp = (ch20_id<<16) | (MESG_NORMAL<<8) | (lcd_led & 0xFF);
sakuraio.enqueueTx(20, tx_tmp);
sakuraio.send();
@@ -283,7 +325,7 @@
}
}
}
- }while(0 < rx_queued);
+ }while(0 < rx_queued); //受信キューが空になるまで回す
SAKURA Internet