head

2017年6月27日火曜日

esp32, センサー値変化を検知/アラーム音出力するBot, ESP-IDF



esp32 での、アラーム通知(サウンド系 ) の機能となります。
これまでの、IoT型センサ値の遷移グラフ機能などに加えて
センサ値の上下を検出し、スピーカーに 矩形波 パルス を送信、
アラーム音を出力します。

*) 小型の電池ボックス(単三 /2本)と組み合わせて、
スリープ機能で、省エネ設計としています。
やや小型(おき場所の困らない程度 )で、完全ワイヤレス
を目標としました。


# 動画
デモ用にアラーム音の再生部分の動画となります。
通常は、数分(5分)スリープして 連続でアラーム音が出力されません。



# thingSpeak --温度/湿度の遷移グラフ


*) アラーム音の通知を受け、
気になれば、PC/スマホで グラフ遷移を見たりできます。



# 処理




deep Sleepでの連続稼動となります。

*) spiFFS に、センサ値(温度)を書き込んでおきます。
*) スリープ解除後、前回の値をspiFFS から読み込み
 最新のセンサ値と比較し、上/下判定を行い。
 対応する音源データを再生。音源データは事前に作成しておきます
*) 変化が少ない場合、(+- 0.5度) アラーム出力無し。
 LEDの点滅のみ実行されます。



# 裏面、電池BOX 配置しています。


# 部品、配置


#19 スピーカー 、半固定ボリューム ( 音量調整 )
#22 LED
#23 dht11 Sensor
*) スピーカーの裏面の端子を、単芯電線とハンダしています

# Speaker
今回のスピーカーは、
通販で購入した、 0.5Wスピーカーが 予想より
大きく、重量も重く 。。基板に実装が困難となったため、
100均(キャンドウさん)の、ヘッドホンを分解し、
スピーカーを取り出しています。(2個 取り出せました。)



# 開発の配線 (補足)
スピーカー周辺ですが、動作確認は
ダイソーさん(100均一)のスピーカー、
秋月さんのステレオ コネクタ
基盤用キット品を使用していました。基板への接続は 便利でした。

3.5mmステレオミニジャックDIP化キット
http://akizukidenshi.com/catalog/g/gK-05363/





# thanks/参考のサイトさま
fs
https://github.com/joysfera/esp-idf-spiffs

https://github.com/loboris/ESP32_spiffs_example

ledc (frequency / PWM)
https://github.com/espressif/esp-idf/tree/master/examples/peripherals/ledc


# driver (BETA)
https://github.com/kuc-arc-f/mku_alarm_bot



# まとめ
応用としては、他のセンサとの組合せ。
他のIoTデバイスのアラーム受信/通知 とか、考えてみたいと思います。



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










2017年6月24日土曜日

esp32, SNTPで UTC/JST 時刻を取得する。 ESP-IDF

esp32 での、SNTP JST 取得、ESP-IDF 版
事例が少なかったので、メモです。

時刻の表示や、指定時刻のデバイス稼動制御
等で使えそうです。



# Code
UTC 時間を取得し、 struct tm
に、日本時間 JST (UTC + 9) を計算し、設定しておきます。



/* LwIP SNTP example
This example code is in the Public Domain (or CC0 licensed, at your option.)
Unless required by applicable law or agreed to in writing, this
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.
*/
#include <string.h>
#include <time.h>
#include <sys/time.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_event_loop.h"
#include "esp_log.h"
#include "esp_attr.h"
#include "esp_deep_sleep.h"
#include "nvs_flash.h"
#include "lwip/err.h"
#include "apps/sntp/sntp.h"
/* The examples use simple WiFi configuration that you can set via
'make menuconfig'.
If you'd rather not, just change the below entries to strings with
the config you want - ie #define EXAMPLE_WIFI_SSID "mywifissid"
*/
//#define EXAMPLE_WIFI_SSID CONFIG_WIFI_SSID
//#define EXAMPLE_WIFI_PASS CONFIG_WIFI_PASSWORD
#define EXAMPLE_WIFI_SSID "your-SSID"
#define EXAMPLE_WIFI_PASS "your-PASS"
/* FreeRTOS event group to signal when we are connected & ready to make a request */
static EventGroupHandle_t wifi_event_group;
/* The event group allows multiple bits for each event,
but we only care about one event - are we connected
to the AP with an IP? */
const int CONNECTED_BIT = BIT0;
static const char *TAG = "example";
/* Variable holding number of times ESP32 restarted since first boot.
* It is placed into RTC memory using RTC_DATA_ATTR and
* maintains its value when ESP32 wakes from deep sleep.
*/
RTC_DATA_ATTR static int boot_count = 0;
static void obtain_time(void);
static void initialize_sntp(void);
static void initialise_wifi(void);
static esp_err_t event_handler(void *ctx, system_event_t *event);
void app_main()
{
++boot_count;
ESP_LOGI(TAG, "Boot count: %d", boot_count);
time_t now;
struct tm timeinfo;
time(&now);
localtime_r(&now, &timeinfo);
// Is time set? If not, tm_year will be (1970 - 1900).
if (timeinfo.tm_year < (2016 - 1900)) {
ESP_LOGI(TAG, "Time is not set yet. Connecting to WiFi and getting time over NTP.");
obtain_time();
// update 'now' variable with current time
time(&now);
}
char strftime_buf[64];
// Set timezone to Eastern Standard Time and print local time
/*
setenv("TZ", "EST5EDT,M3.2.0/2,M11.1.0", 1);
tzset();
localtime_r(&now, &timeinfo);
strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);
ESP_LOGI(TAG, "The current date/time in New York is: %s", strftime_buf);
*/
// Set timezone to China Standard Time
/*
setenv("TZ", "CST-8", 1);
tzset();
localtime_r(&now, &timeinfo);
strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);
ESP_LOGI(TAG, "The current date/time in Shanghai is: %s", strftime_buf);
*/
// Set timezone to xx
setenv("TZ", "UTC", 1);
tzset();
localtime_r(&now, &timeinfo);
strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);
ESP_LOGI(TAG, "The current date/time in UTC is: %s", strftime_buf);
time_t t = now + (3600 * 9 );
struct tm timeinfo_jst;
localtime_r(&t , &timeinfo_jst);
strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo_jst );
ESP_LOGI(TAG, "The current date/time in JST-2 is: %s", strftime_buf);
const int deep_sleep_sec = 10;
ESP_LOGI(TAG, "Entering deep sleep for %d seconds", deep_sleep_sec);
esp_deep_sleep(1000000LL * deep_sleep_sec);
}
static void obtain_time(void)
{
ESP_ERROR_CHECK( nvs_flash_init() );
initialise_wifi();
xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT,
false, true, portMAX_DELAY);
initialize_sntp();
// wait for time to be set
time_t now = 0;
struct tm timeinfo = { 0 };
int retry = 0;
const int retry_count = 10;
while(timeinfo.tm_year < (2016 - 1900) && ++retry < retry_count) {
ESP_LOGI(TAG, "Waiting for system time to be set... (%d/%d)", retry, retry_count);
vTaskDelay(2000 / portTICK_PERIOD_MS);
time(&now);
localtime_r(&now, &timeinfo);
}
ESP_ERROR_CHECK( esp_wifi_stop() );
}
static void initialize_sntp(void)
{
ESP_LOGI(TAG, "Initializing SNTP");
sntp_setoperatingmode(SNTP_OPMODE_POLL);
sntp_setservername(0, "pool.ntp.org");
// sntp_setservername(0, "ntp.nict.jp" );
sntp_init();
}
static void initialise_wifi(void)
{
tcpip_adapter_init();
wifi_event_group = xEventGroupCreate();
ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) );
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK( esp_wifi_init(&cfg) );
ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) );
wifi_config_t wifi_config = {
.sta = {
.ssid = EXAMPLE_WIFI_SSID,
.password = EXAMPLE_WIFI_PASS,
},
};
ESP_LOGI(TAG, "Setting WiFi configuration SSID %s...", wifi_config.sta.ssid);
ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );
ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );
ESP_ERROR_CHECK( esp_wifi_start() );
}
static esp_err_t event_handler(void *ctx, system_event_t *event)
{
switch(event->event_id) {
case SYSTEM_EVENT_STA_START:
esp_wifi_connect();
break;
case SYSTEM_EVENT_STA_GOT_IP:
xEventGroupSetBits(wifi_event_group, CONNECTED_BIT);
break;
case SYSTEM_EVENT_STA_DISCONNECTED:
/* This is a workaround as ESP32 WiFi libs don't currently
auto-reassociate. */
esp_wifi_connect();
xEventGroupClearBits(wifi_event_group, CONNECTED_BIT);
break;
default:
break;
}
return ESP_OK;
}


# Log






2017年6月14日水曜日

esp32, DC/DC 5V コンバータ (入力 2.4V ) テスト編



esp32 のモバイル電源で、電池ボックスの少し 小型化検討してみました。
ニッケル水素/単三の2本(2.4V)で、少し小型化にし
基板の空きスペースに、5V昇圧モジュール を追加しています。

*) 前に 8266で使用していた物と、同一型式です。



# 追加した部品
5V出力コイル一体型昇圧DCDCコンバータ
http://akizukidenshi.com/catalog/g/gM-08619/

*) LDOは、 TA48033S使っています。
 出力最大 1A(1000mA)
*) 2.4V(電池) ⇒ 5V昇圧⇒ 3.3V降圧 の順番となります。

# 配線
販売店さまの、資料参考にしています。



*) WIFI 起動しなかった為、電源ラインに
 470u コンデンサ追加しています。
 おそらく電流不足と予想しています。

# まとめ
deep Sleepで、連続稼動できるか 試してみたいと思います。

=== Update :2017/06/17 ===
100均さま(ダイソー)の、モバイル電源が
単三の2本が内臓できて、出力 5V でした。購入してきました



アルカリ単三用で、電池装着時に、やや圧入。
とりはずし やや困難。
 緊急時とか記載されているので、
使い捨て前程かもしてません。
おそらく昇圧回路内臓されているようです。

*)工具を使うと、電池外す事ができましたが。
ニッケル水素×2本で使う場合は注意したほうが良さそうです。




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

2017年6月13日火曜日

esp32, MCP3425 I2C 16bit ADC ,アナログ編




esp32 adcを ESP-IDF で試してみましたが、
誤差が大きく。。センサによっては使えないレベルのようでした
調査したところ、同様に不正な値が返されてNGぽい記事も発見できましたので。
*) Update で今後 改善されると、期待していますが
以前の旧機種の I2C 外部ADCを拡張する方法を試してみました。


# 追加した部品
MCP3425(16Bit ADC I2C 基準電圧内蔵)搭載モジュール
http://akizukidenshi.com/catalog/g/gK-08018/


# Log / アナログ温度センサの信号ラインの電圧、測定しています。



# 参考の、測定コード
https://gist.github.com/kuc-arc-f/f8db113485e7515fc28c613c1c01cafb

*) 配線は、以前のesp8266版、参考にしています。
http://knaka0209.blogspot.jp/2016/09/esp-wroom-02-16.html



# chip revision , 確認の為 調べてみました。


revison 0でした、古い。。
以前 秋月さんで、まとめ買いしたチップは古かったです。
全て確認していませんが、比較的最近実装したチップです、

試した、revision 確認コード。
https://gist.github.com/kuc-arc-f/de0e9fb7bb8dfd45aec5f8de71db1da3

*) https://www.esp32.com/viewtopic.php?t=1358




# 関連の esp32まとめ
http://knaka0209.blogspot.jp/2017/06/esp32-matome.html




2017年6月8日木曜日

esp32 関連まとめ




# RN4020 BLE + Atmega328, センサ値検知アラーム音出力
http://knaka0209.blogspot.jp/2017/07/esp32-22.html



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





# esp32, センサー値変化を検知/アラーム音出力するBot, ESP-IDF
http://knaka0209.blogspot.jp/2017/06/esp32-20.html





# esp32, SNTPで UTC/JST 時刻を取得する。 ESP-IDF
http://knaka0209.blogspot.jp/2017/06/esp32-19.html



#  esp32, DC/DC 5V コンバータ (入力 2.4V ) テスト編
http://knaka0209.blogspot.jp/2017/06/esp32-18.html






ESP32, MCP3425 I2C 16BIT ADC ,アナログ編
http://knaka0209.blogspot.jp/2017/06/esp32-17.html






# esp32, TFT ILI9341 display テスト編
http://knaka0209.blogspot.jp/2017/05/esp32-16.html





# esp32, BME280 読み込み編
http://knaka0209.blogspot.jp/2017/05/esp32-15.html





# esp32, UART テスト編 (UART2)
http://knaka0209.blogspot.jp/2017/05/esp32-14.html



# RN4020 BLE, esp32 WIFI Bridge 接続編
http://knaka0209.blogspot.jp/2017/05/esp32-13.html





# esp32, HTTPS で、IFTTT(Maker Webhooks)に接続する, ESP-IDF
http://knaka0209.blogspot.jp/2017/05/esp32-12.html



# esp32,複数の BLE beacon + WIFI Bridge の設置 (Deep Sleep版)
http://knaka0209.blogspot.jp/2017/05/esp32-11.html





# esp32, 複数の BLE beacon + WIFI Bridge の設置 (ESP-IDF)
http://knaka0209.blogspot.jp/2017/04/esp32-10-advBridge.html





# esp32+ BLE, Eddystone対応 (Beacon 編)
http://knaka0209.blogspot.jp/2017/04/esp32-9-BLE.html





# esp32+ BLE, Advertising パケットを受信する。
http://knaka0209.blogspot.jp/2017/04/esp32-8-BLE.html





# esp32+ BLE, デバイス間通信、 GattC to GattS
http://knaka0209.blogspot.jp/2017/04/esp32-7-BLE.html





# ESP32, Gatt Server (+BLE Gateway)
http://knaka0209.blogspot.jp/2017/04/esp32-6.html





# ESP32 電力測定 ,3V3 1.5A
http://knaka0209.blogspot.jp/2017/03/esp32-5.html





ESP32 電力測定 ,3V3 2A
http://knaka0209.blogspot.jp/2017/03/esp32-4.html





# ESP32, Deep Sleep テスト
http://knaka0209.blogspot.jp/2017/03/esp32-3.html




# ESP32 +OLED お試し編
http://knaka0209.blogspot.jp/2017/03/esp32-2.html





# esp32 組立て編
http://knaka0209.blogspot.jp/2017/03/esp32-1.html





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




esp8266 関連まとめ



esp8266 工作してみる編
http://knaka0209.blogspot.jp/2016/03/esp-wroom-02-10.html


esp8266 モジュールの製作
http://knaka0209.blogspot.jp/2016/05/esp-wroom-02-11.html


Deep Sleep 設定編
http://knaka0209.blogspot.jp/2016/08/esp-wroom-02-13.html


OLED+ BME280で、天気情報の表示。
http://knaka0209.blogspot.jp/2016/07/OLED-BME-1.html


esp8266で、温湿センサー シールド風の基板
http://knaka0209.blogspot.jp/2016/08/esp-wroom-02-14.html


I2C ADC MCP3425で、アナログ入力編
http://knaka0209.blogspot.jp/2016/09/esp-wroom-02-16.html


Deep Sleepで OLED(有機EL)+DHT11 (電池駆動)
http://knaka0209.blogspot.jp/2016/09/esp-wroom-02-15.html


Deep Sleepで、7セグ+ LM60BIZ センサー、電池駆動
http://knaka0209.blogspot.jp/2016/09/esp-wroom-02-17.html


5V DC/DCコンバータで、esp8266 電源供給。
http://knaka0209.blogspot.jp/2016/09/esp-wroom-02-19.html


Moisture Sensor(Soil Humidity Hygrometer Sensor) お試し編。
http://knaka0209.blogspot.jp/2016/09/esp-wroom-02-20.html


Deep Sleepで、LCD AQM0806+LM60BIZセンサ
http://knaka0209.blogspot.jp/2016/09/esp-wroom-02-21.html


OTA お試し編
http://knaka0209.blogspot.jp/2016/11/esp-wroom-02-26.html



# esp8266, 稼動時間帯設定で連続稼動日の延長テスト
http://knaka0209.blogspot.jp/2017/08/esp8266-45.html




# 関連のまとめ -esp32 関連まとめ
http://knaka0209.blogspot.jp/2017/06/esp32-matome.html



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

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

AD-parts

Shop
Bluetooth搭載
ベース基板

Social