2017年03月12日

ESP32 & BLYNK

IMG_1291.JPG

時間がたつのは早いものです。
ESP-WROOM2のTELECマークがついたものが販売され試してみたのは一昨年の夏ごろでした。
http://blog.toshnet.com/article/160910167.html
このモジュールの特徴の一つは、外付けでマイコンを使用することなく内蔵マイコンにプログラムすることで単体でIoT機能を実現できることです。
この開発もArduinoIDKでできることも、当局のような素人プログラマーには魅力的な機能の一つだと思います。
トラ技3月号はIoT特集でほとんどの記事にこのモジュール(ESP-WROOM2)が使用されていました。

さて本題ですが、今回は最近日本でも技適認証されたものが販売開始された新モデルのESP-WROOM-32です。
ESP-WROOM2との大きな違いは、ブルーツース機能も搭載されていることと、外部I/Oが増えていることです。
ArduinoIDKも対応しています。
2月初めに秋月で販売が開始され、当局も興味本位で購入していました。
サイト検索では、この1.27mmピッチのモジュールに直接はんだ付けして試した記事が散見されるようになっています。
2月末からはaitendoで変換基板が販売開始されました。秋月でもそのうち販売されるのでしょうが、aitendoは今のところ変換基板のみですし、ちょっと変則的です。
当局は先週この変換基板を購入し、早速試してみました。
購入時点での変換基板のバージョンはCまで進んでいました。面白いのは、A、B、Cともに売っているのです。
aitendoらしいな?!と思いました。
で、購入したのは3.3Vのパターンが太く設計されているBバージョンです。バージョンによる違いはこれ以外知りません。

最初はブレッドボードで始めたのですが、結局蛇の目基板に組みました。
その理由は、プログラムの書き込み時は、書き込みモードに設定する必要があり、またプログラム終了し、動作を開始させるのに再度リセットボタンを押さなければならず、頻繁にスイッチを押すためブレッドボードだとスイッチが安定しないだろうと思ったからです。
(評価用のボードにはこの辺りを自動的にってくれる回路が搭載されているようです?)

書き込みモードに入るには、IO_0ピンをGNDにしたままリセットをかけます。
(0ピンをGNDに落とし、リセットをして、リセットを解除して、0ピンをGNDから離す:H)
この状態で書き込まれるのを待ちます。
プログラム書き込み終了後動作を開始させるには、再度リセットします。
(0ピンがHの状態で、リセットをかける)

プログラムの動作確認用に8桁2行のI2CLCDも搭載しました。
センサーとしては、2年前に購入して使わずじまいになっていたBME280をI2Cモードで使用しました。
このセンサーは温湿度だけでなく大気圧も測れるもので興味本位で購入していたものです。

プログラムは、ArduinoIDKの最新版(1.8.*)を使用しました。
まず、センサーの値をLCDに表示させるところから始め、次にWifi機能を取り込みました。
(今回はブルーツースは実験していません)
Wifiに接続した後の相手機器としてスマホを使用し、今回もアプリにBLYNKを使用しました。
このアプリは優れもので、スマホアプリの作り方を全く知らなくても感覚的にセンサーデータをグラフィカルに表示できます。
新しいモジュールが動くのかどうか心配だったのですが、最新版のアプリですでにこのモジュールに対応しておりESP32という形で選択できました。

IMG_0029.JPG

無事動作が確認でき、スマホで表示できている状況が下の写真です。
右下のボタンは、基板側につけたLチカ用のLEDをON/OFFするものです。
このボタンの操作でLEDがON/OFFすれば、回線がつながって動いていることが確認できます。

image.JPG

プログラムは、動作を確認する最小限のものを作りました。
データ更新の頻度や、ディープスリープの活用による電池駆動など実用的プログラムとしては組み込まなければならない機能は多くありますが、目標とする最終形があるわけでもなく、動作確認が主目的ですので、とりあえずここで終わりです。
トラ技あたりでこのモジュールを取り上げてくれれば、実用的なものを作る参考になると思うのですが。
今後に期待したいと思います。

プログラムは、ライブラリの組み合わせですが、前回同様、ご参考になればということでソースを掲載しておきます。

/***************************************************************************
温度 湿度 気圧 測定表示転送
***************************************************************************/
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).

char auth[] = "dc447e***************11d26cfd04";

// Your WiFi credentials.
// Set password to "" for open networks.

char ssid[] = "H**********-bg";
char pass[] = "x**********2";


#include <Wire.h>
#include "cactus_io_BME280_I2C.h"
#include <ST7032.h>

#define SCL_PIN 22
#define SDA_PIN 21

// Create the BME280 object
BME280_I2C bme; // I2C using default 0x77
//BME280_I2C bme(0x76); // I2C using address 0x76

ST7032 lcd;

void setup() {

Blynk.begin(auth, ssid, pass);

if (!bme.begin()) {
//Serial.println("Could not find a valid BME280 sensor, check wiring!");
lcd.print("BMEerror");
while (1);
}

bme.setTempCal(-3.5); //温度補正

// set up the LCD's number of columns and rows:
lcd.begin(8, 2);
lcd.setContrast(30);

}

void loop() {

Blynk.run();

bme.readSensor();

int Temp = bme.getTemperature_C();
int Humid = bme.getHumidity();
int Press = bme.getPressure_MB();
Blynk.virtualWrite(V0, Temp);
Blynk.virtualWrite(V1, Humid);
Blynk.virtualWrite(V2, Press);

lcd.setCursor(0,0);
lcd.print("Tem.");lcd.print(Temp);lcd.print(" C");

lcd.setCursor(0,1);
lcd.print("Hum.");lcd.print(Humid);lcd.print(" % ");

}


※#include 文の<は掲載上全角としています。


posted by ja6irk at 11:11| Comment(4) | TrackBack(0) | AVR&Arduino