ラベル arduino の投稿を表示しています。 すべての投稿を表示
ラベル arduino の投稿を表示しています。 すべての投稿を表示

Blynk 試してみました

Iot アプリの Blynk を試してみました。
 お試しのセンサーには在庫があったものの中から、すべて”I2C”インターフェイスの以下のセンサーを使いました。
・温度、湿度、気圧センサー BME280
・温度、湿度センサー HDC1080
・空気品質センサー CCS811
・光センサー APDS9960


 "Blynk"は、無料で2つのデバイスが登録できるので、コントローラには、ESP32ベースの"M5-StickC"”M5Stack-ATOM"の2種類を使い環境センサーをモニターするシステムを試作しました。
 ”M5-stickC”には、"BME280"を、”M5Stack-ATOM"には4つのセンサー全部をつなぎました。(上の写真)
 開発環境はArduinoIDEです。センサーのライブラリーにはAdafruit社Sparkfun社のものをいろいろ試して、使いやすいもの(簡単なもの)を組み合わせました。
こちらは、スマホで"Blynk"アプリにログインしたところのスクリーンショット(iPhone)です。

 まずは、"M5-StickC"にCJMCU-280(BME280)を手作り変換コネクタで直接差し込んだセットでのお試しです。
 せっかくLCDがあるので、ボタンを押すと数値を表示するようにしてみました。
 パソコンのWeb Dashboardです。メーター表示やグラフ表示もできます。画面右の黒い画面はターミナルWidgetで、パソコンあるいはスマホと"M5-StickC"を”Blynk"を介してコミュニケーションしています。
 こちらは、スマホアプリのDashboardでWeb版とは別にスマホで設定します。

 そして、ブレッドボードの上に組み込んでみたのが、4っつのセンサーと”M5Stack-ATOM"です。LED表示ができる"Matrix"を使ったのですが、今回LEDは使いませんでした。


 こちらのWebDashboardです。測定データが多いのでターミナルに吐き出してみました。
    スマホのDashboardです。
 スマホからもTerminalが使えています。開発途中はいろんなコメントを流せるので、特に便利です。

 感想
 "Blynk"だけで入出力ともに簡単にできてしまうのが気に入りました。とりあえず無償版でどこまで使えるか、いろいろ試してみたくなりました。






chatGPTを使ってみた

chatGPTを使ってみた

やり取りのコピーです。参考まで。
         

User
IOTサポートサービスのBLYNKとは

ChatGPT
Blynkは、インターネット・オブ・シングス(IoT)のためのスマートフォンアプリとクラウドサービスを提供するプラットフォームです。Blynkは、ユーザーがスマートフォンで簡単にカスタマイズ可能なモバイルアプリを作成し、Wi-Fi、Bluetooth、またはEthernetを介して接続されたIoTデバイスを制御することができます。

Blynkを使用することで、ユーザーはスマートフォンやタブレットからリアルタイムでデータを監視、制御し、グラフやダッシュボードに表示することができます。また、Blynkは多くの人々にとってはオープンソースであり、また、簡単にカスタマイズできることも魅力的です。

Blynkは、多くのIoTプロジェクトで使用されています。たとえば、自宅の照明や温度制御、ガーデニング、飼育用具の制御、または小型ロボットの制御などがあります。





User
esp8266にドアの開閉センサー(スイッチ)を4個接続しwifi経由でインターネット接続し、そのドアの開閉状態をBLYNKを使ってスマホで管理(表示)するため以下の質問に答えろ。
1.esp8266のArudinoIDE用のCODEは?
2.BLYNKの設定は?
ChatGPT
1.以下は、esp8266にドアの開閉センサーを4個接続し、Blynkを使用してスマートフォンでドアの開閉状態を監視するためのArudinoIDEのスケッチコードの例です。この例では、GPIO0、GPIO2、GPIO4、およびGPIO5にそれぞれのセンサースイッチを接続しています。

scss
Copy code
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

char auth[] = "YourAuthToken";
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";

int door1 = 0;
int door2 = 2;
int door3 = 4;
int door4 = 5;

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  pinMode(door1, INPUT_PULLUP);
  pinMode(door2, INPUT_PULLUP);
  pinMode(door3, INPUT_PULLUP);
  pinMode(door4, INPUT_PULLUP);
}

void loop()
{
  Blynk.run();
  int state1 = digitalRead(door1);
  int state2 = digitalRead(door2);
  int state3 = digitalRead(door3);
  int state4 = digitalRead(door4);
  Blynk.virtualWrite(V1, state1);
  Blynk.virtualWrite(V2, state2);
  Blynk.virtualWrite(V3, state3);
  Blynk.virtualWrite(V4, state4);
  delay(1000);
}
2.以下は、Blynkアプリで使用する設定です。

Blynkアプリをダウンロードし、アカウントを作成します。
新しいプロジェクトを作成し、「+」アイコンをタップして、新しいデバイスを追加します。
「ESP8266」を選択し、Wi-Fi接続の設定を行います。
ウィジェットを追加するには、「+」ボタンをタップしてウィジェットパネルを開き、必要なウィジェットを選択します。この例では、4つの状態を監視するために4つのLEDウィジェットを使用します。
ウィジェットのプロパティを設定するには、ウィジェットをタップして、必要な設定を行います。
ウィジェットをESP8266のピンに割り当てるには、ウィジェットをタップして「設定」を開き、「ピン設定」をタップします。各ウィジェットに対応するピンを指定します。この例では、LEDウィジェットV1はGPIO0に、V2はGPIO2に、V3はGPIO4に、V4はGPIO5に接続されています。
以上の手順で、esp8266にドアの開閉センサーを接続して、Blynkを使用





User
このシステムで、ドアの開閉時にスマホに通知を表示する方法は?
ChatGPT
このシステムで、ドアの開閉時にスマートフォンに通知を表示するには、Blynkアプリでプッシュ通知を設定する必要があります。以下は、手順です。

Blynkアプリで、プロジェクトの設定メニューを開きます。
「プッシュ通知」をタップして、通知を設定します。
「デバイスがオンラインかオフラインになったときに通知を受け取る」オプションを選択します。
「V1〜V4」の各ピンに対応する「Device Tile」ウィジェットをタップして、そのウィジェットの設定メニューを開きます。
「ピン設定」をタップして、通知を受け取るためのピンを選択します。
ウィジェットの設定メニューで、「Notify When」を選択し、通知を受け取るイベント(たとえば「HIGH」、「LOW」、「CHANGE」など)を選択します。
「+」ボタンをタップして、通知を受け取るための「Notification Widget」を追加します。
「Notification Widget」の設定メニューを開き、通知のタイトルとメッセージを設定します。
設定を保存します。
これで、ドアの開閉時にピンの状態が変化すると、スマートフォンに通知が送信されます。注意点として、プッシュ通知を受け取るには、スマートフォンでBlynkアプリの通知を許可する必要があります。通知設定は、スマートフォンの設定メニューで行うことができます。





User
ArudinoIDEのスケッチコードの例にコード内のコメントをなるべく詳細に追加して
ChatGPT
以下は、esp8266にドアの開閉センサーを接続し、Blynkを使用してドアの開閉状態をスマートフォンに表示するためのArduino IDEのスケッチコードの例です。コード内にはコメントが付与されています。

scss
Copy code
// 必要なライブラリをインクルードする
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

// Wi-Fiの接続情報を設定する
char ssid[] = "your_SSID";
char pass[] = "your_PASSWORD";

// Blynkの認証情報を設定する
char auth[] = "your_AUTH_TOKEN";

// ドアセンサーのピン番号を設定する
int door1 = 2; // ピン2に接続されているセンサー
int door2 = 3; // ピン3に接続されているセンサー
int door3 = 4; // ピン4に接続されているセンサー
int door4 = 5; // ピン5に接続されているセンサー

// センサーの状態を格納する変数を初期化する
int door1State = 0;
int door2State = 0;
int door3State = 0;
int door4State = 0;

// Wi-Fiに接続する関数
void setupWifi() {
  delay(10);
  // Wi-Fiに接続する
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, pass);
  // Wi-Fiが接続されるまで待機する
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Wi-Fiの接続が成功した場合、シリアルモニターにIPアドレスを表示する
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void setup() {
  // シリアル通信を開始する
  Serial.begin(9600);
  // Wi-Fiに接続する
  setupWifi();
  // Blynkに接続する
  Blynk.begin(auth, ssid, pass);
  // ドアセンサーのピンを入力モードに設定する
  pinMode(door1, INPUT);
  pinMode(door2, INPUT);
  pinMode(door3, INPUT);
  pinMode(door4, INPUT);
}

void loop() {
  // Blynkに接続する
  Blynk.run();
  // ドアセンサーの状態を取得する
  door1State = digitalRead(door1);
  door2State = digitalRead(door2);
  door3State = digitalRead(door3);
  door4State = digitalRead(door4);
  // ドアセンサーの状態をBlynkに送信する
  Blynk.virtualWrite(V1, door1State);
  Blynk.virtualWrite(V2, door2State);
  Blyn




User
BlynkSimpleEsp8266.h が見つかりません
ChatGPT
BlynkSimpleEsp8266.hを使用するためには、事前にBlynkライブラリをArduino IDEにインストールする必要があります。以下の手順に従って、Blynkライブラリをインストールしてください。

Arduino IDEを開きます。
「スケッチ」->「ライブラリをインクルード」->「ライブラリを管理」を選択します。
検索ボックスに「Blynk」を入力し、検索します。
検索結果から「Blynk by Volodymyr Shymanskyy」を選択します。
「インストール」ボタンをクリックし、ライブラリをインストールします。
インストールが完了したら、Arduino IDEを再起動します。
Blynkライブラリがインストールされたら、以下の行をスケッチコードの先頭に追加します。

arduino
Copy code
#include <BlynkSimpleEsp8266.h>
もし、BlynkSimpleEsp8266.hが見つからない場合は、ライブラリが正しくインストールされているか確認してください。





User
esp8266wifi.hはどのように探しますか
ChatGPT
「esp8266wifi.h」は、Arduino IDEでESP8266マイコンボードをプログラムする際に使用するWiFiライブラリです。このライブラリは、Arduino IDEに最初から含まれているわけではなく、別途インストールする必要があります。

以下の手順に従って、esp8266wifi.hを探してインストールしてください。

Arduino IDEを開きます。
「スケッチ」 -> 「ライブラリをインクルード」 -> 「ライブラリを管理」を選択します。
検索ボックスに「ESP8266WiFi」と入力し、検索します。
検索結果から「ESP8266WiFi by ESP8266 Community」を選択します。
「インストール」ボタンをクリックし、ライブラリをインストールします。
インストールが完了したら、Arduino IDEを再起動します。
これで、「esp8266wifi.h」を含むWiFiライブラリがインストールされます。スケッチコードでライブラリを使用する場合は、次のようにコードの先頭に行を追加してください。

arduino
Copy code
#include <ESP8266WiFi.h>
注意:ESP8266マイコンボードをArduino IDEに正しく追加して設定していない場合は、ESP8266に関連するライブラリがライブラリマネージャーに表示されない場合があります。その場合は、ESP8266マイコンボードを正しく追加し、設定してからライブラリマネージャーでライブラリを検索してインストールしてください。





User
Blynkの認証情報を取得する方法は
ChatGPT
Blynkの認証情報を取得するには、以下の手順を実行してください。

Blynkアプリをダウンロードし、アカウントを作成します。
ログインしたら、新しいプロジェクトを作成します。
プロジェクトを作成すると、認証トークンが自動的に生成されます。このトークンは、プロジェクトの識別子として機能し、ESP8266とBlynkサーバーの間の通信を確立するために使用されます。
認証トークンは、プロジェクトの設定画面から取得できます。Blynkアプリで、プロジェクトの画面を開き、右上隅の「設定」アイコンをタップして、設定画面に進みます。
設定画面で、「認証トークン」をクリックして、トークンをコピーします。
ESP8266でBlynkを使用するスケッチで、認証トークンを使用するには、次のようにコードを追加します。

arduino
Copy code
#define BLYNK_AUTH_TOKEN "YourAuthToken"
「YourAuthToken」を、実際の認証トークンに置き換えてください。このトークンは、Blynkサーバーに接続するために必要です。





User
コメントを追加したCODEは途中までしか出力されていない。もう一度コメント付きのCodeを出力して
ChatGPT
申し訳ありませんが、前回の回答でコードの一部が抜けていたことに気づきました。以下は、コメント付きの完全なESP8266スケッチコードです。コメントは可能な限り詳細に追加されています。

scss
Copy code
// BlynkとWiFiライブラリをインクルード
#include <BlynkSimpleEsp8266.h>
#include <ESP8266WiFi.h>

// Blynk認証トークンを設定
char auth[] = "YourAuthToken";

// WiFiネットワークに接続するための認証情報を設定
char ssid[] = "YourNetworkName";
char pass[] = "YourNetworkPassword";

// ドアの開閉センサーに接続されたデジタルピン番号を設定
int door1Pin = D0; 
int door2Pin = D1;
int door3Pin = D2;
int door4Pin = D3;

// Blynkに表示するウィジェットのピン番号を設定
int door1Widget = V0;
int door2Widget = V1;
int door3Widget = V2;
int door4Widget = V3;

void setup() {
  // シリアル通信を初期化
  Serial.begin(9600);

  // WiFiネットワークに接続
  WiFi.begin(ssid, pass);
  Serial.print("Connecting to ");
  Serial.print(ssid);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Connected to ");
  Serial.println(ssid);

  // Blynkに接続
  Blynk.begin(auth, ssid, pass);

  // ピンモードを設定
  pinMode(door1Pin, INPUT_PULLUP);
  pinMode(door2Pin, INPUT_PULLUP);
  pinMode(door3Pin, INPUT_PULLUP);
  pinMode(door4Pin, INPUT_PULLUP);
}

void loop() {
  // Blynkサーバーとの通信を維持
  Blynk.run();

  // ドアの開閉状態を取得
  int door1Status = digitalRead(door1Pin);
  int door2Status = digitalRead(door2Pin);
  int door3Status = digitalRead(door3Pin);
  int door4Status = digitalRead(door4Pin);

  // ドアの状態をBlynkに表示
  Blynk.virtualWrite(door1Widget, door1Status);
  Blynk.virtualWrite(door2Widget, door2Status);
  Blynk.virtualWrite(door3Widget, door3Status);
  Blynk.virtualWrite(door4Widget, door4Status);
  
  // ドアが開いたときにスマホに通知を送信
  if (door1Status == LOW) {
    Blynk.notify("Door 1 is open!");
  }
  if (door2Status == LOW) {
    Blynk.notify("Door 2 is open!");
  }
  if (door3Status == LOW) {
    Blynk.notify("Door 3 is open!");
  }
  if (door4Status == LOW)




User
また、途中で終わったよ
ChatGPT
申し訳ありません、前回の回答でコードの一部が失われていたようです。以下は、コメント付きの完全なESP8266スケッチコードです。コメントは可能な限り詳細に追加されています。

scss
Copy code
// BlynkとWiFiライブラリをインクルード
#include <BlynkSimpleEsp8266.h>
#include <ESP8266WiFi.h>

// Blynk認証トークンを設定
char auth[] = "YourAuthToken";

// WiFiネットワークに接続するための認証情報を設定
char ssid[] = "YourNetworkName";
char pass[] = "YourNetworkPassword";

// ドアの開閉センサーに接続されたデジタルピン番号を設定
int door1Pin = D0; 
int door2Pin = D1;
int door3Pin = D2;
int door4Pin = D3;

// Blynkに表示するウィジェットのピン番号を設定
int door1Widget = V0;
int door2Widget = V1;
int door3Widget = V2;
int door4Widget = V3;

void setup() {
  // シリアル通信を初期化
  Serial.begin(9600);

  // WiFiネットワークに接続
  WiFi.begin(ssid, pass);
  Serial.print("Connecting to ");
  Serial.print(ssid);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Connected to ");
  Serial.println(ssid);

  // Blynkに接続
  Blynk.begin(auth, ssid, pass);

  // ピンモードを設定
  pinMode(door1Pin, INPUT_PULLUP);
  pinMode(door2Pin, INPUT_PULLUP);
  pinMode(door3Pin, INPUT_PULLUP);
  pinMode(door4Pin, INPUT_PULLUP);
}

void loop() {
  // Blynkサーバーとの通信を維持
  Blynk.run();

  // ドアの開閉状態を取得
  int door1Status = digitalRead(door1Pin);
  int door2Status = digitalRead(door2Pin);
  int door3Status = digitalRead(door3Pin);
  int door4Status = digitalRead(door4Pin);

  // ドアの状態をBlynkに表示
  Blynk.virtualWrite(door1Widget, door1Status);
  Blynk.virtualWrite(door2Widget, door2Status);
  Blynk.virtualWrite(door3Widget, door3Status);
  Blynk.virtualWrite(door4Widget, door4Status);
  
  // ドアが開いたときにスマホに通知を送信
  if (door1Status == LOW) {
    Blynk.notify("Door 1 is open!");
  }
  if (door2Status == LOW) {
    Blynk.notify("Door 2 is open!");
  }
  if (door3Status == LOW) {
    Blynk.notify("Door 3 is open!");
  }
  if (door4Status == LOW) {
    Blynk.notify




User
どうしたの? またまた、Codeが最後まで出力されていないよ
ChatGPT

2 / 2

おっしゃる通りでした。大変申し訳ありません。以下が、コメント付きの完全なESP8266スケッチコードです。

scss
Copy code
// BlynkとWiFiライブラリをインクルード
#include <BlynkSimpleEsp8266.h>
#include <ESP8266WiFi.h>

// Blynk認証トークンを設定
char auth[] = "YourAuthToken";

// WiFiネットワークに接続するための認証情報を設定
char ssid[] = "YourNetworkName";
char pass[] = "YourNetworkPassword";

// ドアの開閉センサーに接続されたデジタルピン番号を設定
int door1Pin = D0; 
int door2Pin = D1;
int door3Pin = D2;
int door4Pin = D3;

// Blynkに表示するウィジェットのピン番号を設定
int door1Widget = V0;
int door2Widget = V1;
int door3Widget = V2;
int door4Widget = V3;

void setup() {
  // シリアル通信を初期化
  Serial.begin(9600);

  // WiFiネットワークに接続
  WiFi.begin(ssid, pass);
  Serial.print("Connecting to ");
  Serial.print(ssid);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Connected to ");
  Serial.println(ssid);

  // Blynkに接続
  Blynk.begin(auth, ssid, pass);

  // ピンモードを設定
  pinMode(door1Pin, INPUT_PULLUP);
  pinMode(door2Pin, INPUT_PULLUP);
  pinMode(door3Pin, INPUT_PULLUP);
  pinMode(door4Pin, INPUT_PULLUP);
}

void loop() {
  // Blynkサーバーとの通信を維持
  Blynk.run();

  // ドアの開閉状態を取得
  int door1Status = digitalRead(door1Pin);
  int door2Status = digitalRead(door2Pin);
  int door3Status = digitalRead(door3Pin);
  int door4Status = digitalRead(door4Pin);

  // ドアの状態をBlynkに表示
  Blynk.virtualWrite(door1Widget, door1Status);
  Blynk.virtualWrite(door2Widget, door2Status);
  Blynk.virtualWrite(door3Widget, door3Status);
  Blynk.virtualWrite(door4Widget, door4Status);
  
  // ドアが開いたときにスマホに通知を送信
  if (door1Status == LOW) {
    Blynk.notify("Door 1 is open!");
  }
  if (door2Status == LOW) {
    Blynk.notify("Door 2 is open!");
  }
  if (door3Status == LOW) {
    Blynk.notify("Door 3 is open!");
  }
  if (door4Status == LOW) {
    Blynk.notify("Door 4 is open!");
  }

  // 少し待機
  delay(500);
}




User
コンパイルエラーが出た
 exit status 1
Compilation error: 'class BlynkWifi' has no member named 'notify'
ChatGPT
エラーメッセージから、 BlynkWifi クラスに notify メソッドが存在しないことが原因であることがわかります。これは、Blynkのバージョンによっては notify メソッドが廃止されたためである可能性があります。

この問題を解決するためには、以下の手順を実行してください。

Blynkのバージョンを最新のバージョンにアップグレードするか、別の方法で通知を送信するようにコードを変更する必要があります。

Blynk.notify() を Blynk.virtualWrite(V1, value) に変更し、Blynkアプリのウィジェットを使用して通知を表示することができます。たとえば、テキストウィジェットを使用して通知を表示する場合は、以下のように設定できます。

ウィジェットタイプを「テキスト」に設定します。
仮想ピン番号を V1 に設定します。
ラベルを適切な通知メッセージに設定します。
もし、Blynkアプリに通知を送信するのではなく、他の方法で通知を送信する必要がある場合は、別のライブラリを使用するか、独自の方法で通知を送信する必要があります。

上記の方法で解決できない場合は、より詳細な情報を含めて、詳細な質問を投稿してください。





User
もう一つエラーが
exit status 1
Compilation error: 'D0' was not declared in this scope; did you mean 'A0'?
ChatGPT
このエラーメッセージは、D0 がスケッチの中で宣言されていないために発生しています。このエラーは、ESP8266のピン番号を正しく指定していない場合によく発生します。

D0 は、ESP8266のピン番号ではなく、NodeMCUなどのESP8266ボード上のピン名の一部です。ESP8266のピン番号を指定する必要があります。

例えば、D0 がESP8266のGPIO16に対応している場合、以下のように記述する必要があります。

c++
Copy code
#define PIN_D0 16 // D0として定義する

void setup() {
  pinMode(PIN_D0, INPUT); // D0ピンを入力モードに設定
}

void loop() {
  int sensorValue = digitalRead(PIN_D0); // D0ピンからの読み取り
  // 他の処理
}
このように、D0 などのピン名を使用する代わりに、ESP8266のピン番号を定義して、スケッチで使用することができます。

         
ここまでです。 参考にしてください。
Free Research Preview. ChatGPT may produce inaccurate information about people, places, or facts. ChatGPT May 3 Version

mBlockへの機能拡張について

OttoロボットをmBlockでプログラミングするときの機能拡張方法をメモしておきます。

マニュアルには、「機能拡張を管理する」ダイアログで"ottodiy"を検索してダウンロードする方法が記載されていますが、OttoDIY/Hyumanoidは検索しても見つかりません。
そんな時は、OttoDIY/Hyumanoidのファイルに含まれているExtensionのzipファイルを「機能拡張を管理する」ダイアログの”拡張機能を追加する”ボタンで追加するとOKです。

IoT でホームセキュリティーシステム

IoT のお勉強に、ホームセキュリティーシステムを構築してみました。

 窓やドアに取り付けたセンサーで、窓やドアの開閉を察知し、インターネット経由で、スマホに知らせるシステムです。

使った装置は
写真で説明すると、右上の黒いのが、5V AC-DC 電源、中央の緑の基盤は 5V to 3V DC-DCコンバータ、その左が、

ESP-Wroom-02 Breakout Board
https://chum.official.ec/items/8075423


そして、左端に、センサー接続用の端子です。
すべて、手持ちの在庫で、間に合わせ、購入したのは、ケースにした、¥100ショップのA4ケースです。

今回の実際の購入金額はケースの108円だけでしたが、すべて購入したとしても、センサーを除き3000円くらいだと思います。センサーは、1か所100円くらいですが配線は大変です。

スマホとESP-Wroom-02は、IFTTT と beebotte の無償サービスを使って、双方向の通信が可能になるように作りました。

動作としては、
1.スマホからESP-Wroom-02にコマンド送出
2.ESP-Wroom-02からスマホに状態報告
です。

ご興味のある方は、涵養塾までお問い合わせください。

IFTTT
https://ifttt.com/

beebotte
https://beebotte.com/

#WSPWroom02 #ESP8266 #IoT #IFTTT #beebotte #ArduinoIDE #HA #ホームセキュリティー #MQTT #HA

Blue Tooth Serial module HC-06 設定・確認マニュアル

Blue Tooth Serial module HC-06 設定・確認マニュアル

工場出荷状態
BAUD=9600
PIN=1234

Arduinoのシリアルモニターでは"CRおよびLF""9600bps"の設定で接続します。
HC-06の電源を入れると

+READY
+PAIRABLE

とレスポンスが帰ってきたらOKです。

"AT"をおくると"OK"とレスポンスが帰ってきます。

涵養塾仕様は

DeviceName と BAUDを変更します。

"AT+NAMECHUM**"を送信すると

+NAME=CHUM01
OK

とレスポンスが帰ってきます。

"AT+BAUD8"を送ると

+BAUD=8
OK

とレスポンスが帰ってきます。

AT+HELPのリスト

Command              Description
----------------------------------------------------------------
AT                   Check if the command terminal work normally
AT+RESET             Software reboot
AT+VERSION           Get firmware, bluetooth, HCI and LMP version
AT+HELP              List all the commands
AT+NAME              Get/Set local device name
AT+PIN               Get/Set pin code for pairing
AT+BAUD              Get/Set baud rate
AT+CLEAR             Remove the remembered remote address
AT+LADDR             Get local bluetooth address
AT+DEFAULT           Restore factory default
AT+COD               Get/Set local class of device
AT+IAC               Get/Set inquiry access code
AT+ROLE              Get/Set master or slave mode
AT+STATE             Get current state
AT+UARTMODE          Get/Set uart stop bits and parity
AT+ENABLEIND         Enable/Disable Indication print
AT+LSP               List Paired Device List
AT+RESETPDL          Reset Paired Device List
AT+REMOVEPDL         Remove one entry from Paired Device List
-----------------------------------------------------------------
Note: (M) = The command support master mode only, other commands
support both master and slave mode.
For more information, please visit http://www.bolutek.cn
Copyright@2012 www.bolutek.cn. All rights reserved.

BAUDのパラメータは以下の通り、
1---1200
2---2400
3---4800
4---9600
5---19200
6---38400
7---57600
8---115200
9---230400
A---460800
B---921600
C---1382400 
default:4---9600 

AT-Commandの説明
http://diwo.bq.com/wp-content/uploads/2014/11/BLK-MD-BC04-B_AT-COMMANDS.pdf
+NAME=CHUM07

Windows10でFT232RL FTDI アダプタを使ってテスト設定するときの手順

1.FT232RL FTDI アダプタをUSBに接続し、Aduinoのシリアルモニターを起動

2.HC-06をFT232RL FTDI アダプタに接続すると

+READY

+PAIRABLE

とレスポンス

3."AT"をおくると

OK

とレスポンス

4."AT+NAMECHUM**"を送信すると

+NAME=CHUM01
OK

とレスポンス

5."AT+BAUD8"を送ると

+BAUD=8
OK

とレスポンス

6.Windows10でHC-06とペアリングする(PINは1234)

7.ペアリングできたら、デバイスマネージャでCOMポート番号を確認し、「TERA Term」等ターミナルアプリで、HC-06の割り当てられた、COMポートに接続する

+CONNECTING<<**:**:**:**:**:**
CONNECTED

とレスポンス

7.HC-06のCOMポートとFT232RL FTDI アダプタのCOMポート間で通信を確認

8.ターミナル側アプリを終了すると

+DISC:SUCCESS
+READY
+PAIRABLE

とレスポンス


*注)
Windows10では、HC-06をペアリングするとCOMポートが2つ割り当てられる。どちらが使えるか確認する必要あり??

ESP-WROOM-02 での"LIGHT_SLEEP_T"でSleepから復旧しない問題

ESP-WROOM-02 での"LIGHT_SLEEP_T"以下のSampleプログラムで、Sleepしてから、復旧しない問題が発生していた。

--------------**********こんな単純なプログラムで
extern "C" {
#include
}

void setup() {
  // ... Wi-Fi設定等

  wifi_set_sleep_type(MODEM_SLEEP_T);
}

void loop() {
}

------------**************

SleepほぼすぐにSleep状態になるが、いつまでたっても復旧しない。
購入した別のNODEMCUボードでも同じ、WeMosボードでも同じ????

ふと思い立って、ファームを最新版に書き換えてみた。

復旧しました。 チャンチャンチャーン!

「信じるな、ソフトは常に変化する」

πduino パイデュィ~ノ(ラズパイ+arduino)のためのRASPBIAN設定

RaspberryPi + πduinoパイデュィ~ノ 環境の設定です。

πduinoは、Arduino互換ボードのUARTとRaspberryPiのGPIOポートのUARTを接続し、RASBIANのArduinoIDEからUART経由でプログラミングしたり、Scratchのセンサーボード(PicoBoard,なのぼ~ど,WeDo)のような機能を実現するものです。
参照:(トランジスタ技術2017年2月号の付録)

RASBIANのConfigは、トランジスタ技術本誌に記載されていますが、誤記等もあったのでをメモしておきます。

UARTのconfigは、オンボードのBlueToothに影響を与えるので、RaspberriPi3BとRaspberryPi Zero Wの2機種はOnBoardのBlueToothは使えなくなります。

・確認OSバージョン
 Raspbian 8.0(Jessie)

1.事前インストール
 以下のコマンドで、WiringPiとPythonをインストールしておく

  $sudo apt-get install python-dev python-setuptools
  $sudo apt-get install python-pip
  $sudo pip install wiringpi2
  $

2.ArduinoIDEのための設定
 2-1.シリアルポートの設定変更

  $sudo leafpad /boot/config.txt
   最終行の下に以下の2行を追加

   dtoverlay=pi3-miniuart-bt
   enable_uart=1

  $sudo leafpad /boot/cmdline.txt
   以下の内容に変更します

   変更前(1行です)
   dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait splash plymoutth.ignore-serial-consoles
   
   下線部分変更後(1行です)
   dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait splash plymoutth.ignore-serial-consoles
   

  $sudo reboot

 2-2.シリアル・ポートのデバイス・ファイル名変更(Arduino1.8.3では不要)
  ArduinoIDE1.0.xでは、”ttyAMA0”が認識できないので、”ttyS8"にリンクしておく

  $sudo leafpad /etc/udev/rules.d/80-ttyS8.rules
   以下の内容で作成します
   KERNEL=="ttyAMA0", SYMLINK+="ttyS8", GROUP="dialout", MODE:=0666

3.UARTのDTR機能を有効にする

  $sudo leafpad /etc/rc.local
   最後のほうの、"exit 0" の前の行に以下を追加する
   /usr/bin/gpio mode 0 alt3


HackBerry 電動義手 電子部品、金属部品キット

HackBerry 電動義手 電子部品、金属部品キット

HackBerry で使う電子部品と金属部品をキットにしました。


プリント基板は右手用(白)と左手用(茶色)があります。 どちらかをご指定下さい。

部品表は下記「涵養塾在庫表」の「HACKキット部品表」をご覧ください。https://docs.google.com/spreadsheets/d/1QE58LmNZpJyXpU6QLwH1ASy_kHTpAW_pjGs5_zJI8yI/pubhtml?gid=50258853&single=true

バッテリーとセンサーは含まれていません。別途ご用意ください。

価格 ¥9,500円(税込み 送料別) オンラインショップ

別売り標準センサーボードはこちら ¥1000円(税込み 送料別) オンラインショップ

お願い:
最近、サーボモータのES08MDの入手が難しく、代わりに、ES08MDII、または、ES08MAII を同梱する場合があります。 この場合は回転方向が逆になりますので、プログラムで回転方向を正しく設定してください。

チャレンジしてみたい方、お気軽にご連絡ください。
お問い合わせ

参考情報:
こ部品キットでは、マイクロコントローラを価格の面からArduino-Microではなく、格安のArduino-NANO互換品にしています。

このため、マイクロコントローラチップと、USB-Serial変換チップが違います。

まず、マイクロコントローラチップの違いから、1か所だけIOピンのコンフィギュレーションの変更が必要です。

V1の右手用ソースコードでは、
const int calibPin0  = A6:
この行を
const int calibPin0  = 4:
に変更します。
(左手用ソースコードの変更はありませんが、キャリブレーションのスイッチ動作が右手用途は違うようですのでご注意。)

最新のソースコードでは確認していませんので、Arduino-MicroとArduino-NANOのピン番号を比較して、適切に変更してください。

また、USB-Serial変換チップにはCH340が使われています。
Windows10では自動でドライバーがインストールされていますが、Windows7で自動でドライバーがインストールされないようです。
別途ドライバーをインストールする必要があります。

下記のブログが参考になりました。
CH340 USBシリアル変換ドライバ | ネクストステップ サポートBlog

実際に利用したドライバーのリンクは下記のとおりです。

CH341SER.ZIP
または、
CH341SER.EXE

ご参考まで。

スマートカーキット  CHUM ESP-Toy(esp8266) と Scratch Mesh

スクラッチ(ピョンキー)を使ったロボットプログラミングに最適のスマートカーキット 2種
ESP-Toyとセットでロボットプログラムの入門として最適です。

・3Dプリンターで作った、LEGO規格サイズのスマートカーキット
Smart Car Kit-LEGO_Forn_Factor


・アクリルベースの大型タイヤモデル
  Smart Car Kit-Acryl_Base
(超音波センサーはオプション)

ESP-Toyとセットで ¥3,000円(税込み 送料別)


ESP-Toyには、WiFi-APモードでScratch(Pyonkee)のMesh(遠隔センサー機能)対応のファームウェアが準備されています。

参考リンク
ITPRO 簡単だけど奥が深い!Scratchプログラミングの魅力
Mesh Scratch wiki




涵養塾のオリジナル商品や、取扱部品の価格や在庫状況は、涵養塾の在庫票をご参照下さい。

チャレンジしてみたい方、お気軽にご連絡ください。
お問い合わせ

2.4" 240x320 color LCD と Arduino nano で、小さなターミナルを自作してみました。

2.4" 240x320 color LCD と Arduino nano で、小さなターミナルを自作してみました。
写真中央のArduino-NANOをコントローラとして、手前の黒いコネクタはマイコン用のUART、左上は電源コネクタ、右上はキーボード用のPS2コネクタ、その他はArguino互換のピン配置で、LCDモジュール用のコネクタだ。

実験なので、Arduino互換ピン配置のユニバーサルボードを使って、ラッピングで配線をした。

 液晶モジュールを載せたところ。

 キーボードと電源をつないで、ハイこの通り。
 画面の向き、文字の大きさ・色、UARTの通信速度等が設定できるように作ってみた。

チャレンジしてみたい方、お気軽にご連絡ください。

お問い合わせ






参考までに、Arduino-NANOのCodeです。
是非、コメントをお寄せください。

/* By T.Kasahara May-26 '17 CHUM_Terminal Ver1.0
 *PS2Keyboard Japanese Keyboard Layout  
  Color TFTLCD Adafruit library 
  PS2 Key board
  Charactor Terminal
F1 :Help
F5 :Save Setting
F6 :Local Echo
F7 :Board Rate
F8 :Reverse Color
F9 :Back color
F10:Font color
F11:Rotation
F12:Font Size

-ESC- for Exit from Settings
 
*/

//#define DEBUG //Debug mode

#ifdef DEBUG
 #define DEBUG_PRINTLN(x)  Serial.println (x)
 #define DEBUG_PRINT(x)  Serial.print (x)
 #define DEBUG_FPRINT(x,y)  Serial.print (x,y)
#else
 #define DEBUG_PRINTLN(x)
 #define DEBUG_PRINT(x)
 #define DEBUG_FPRINT(x,y)
#endif

#include    // Core graphics library
#include // Hardware-specific library
#include

#define YP A1  // must be an analog pin, use "An" notation!
#define XM A2  // must be an analog pin, use "An" notation!
#define YM 7   // can be a digital pin
#define XP 6   // can be a digital pin

#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 920
#define TS_MAXY 940

// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// For the one we're using, its 300 ohms across the X plate
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0

CHUM_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD);

#define T_Wrap HIGH //Text Wrap around ON:HIGH,OFF:LOW
#define blink_speed 1000
#define D_Width 240 //Display Width size Pixel
#define D_Hight 320 //Display Hight size Pixel
#define Wait_setup 2000

// Assign human-readable names to some common 16-bit color values:
#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

#include
#define EE_boardrate 1023
#define EE_F_color 1022
#define EE_B_color 1021
#define EE_rotation 1020
#define EE_C_Size 1019
#define EE_Echo 1018

#include //code modified for Japanese Key board
const int DataPin = 18;
const int IRQpin =  2;
PS2Keyboard keyboard;

int color[]={BLACK,BLUE,RED,GREEN,CYAN,MAGENTA,YELLOW,WHITE};
int C_Size = 2; //Charactor Mag.
#define C_Max 4
long rate[]={9600,19200,38400,57600,74880,115200,230400,250000};
int boardrate = 0;
int rotation = 0; //Display rotation 0&2:H,1&3:V
int F_color = 0;
int B_color = 0;
int echo = 0;

int End_Line ;
int C_Line = 0;
boolean toggle = 0;
int ii,jj;
char cc;
uint8_t c;
int count;
unsigned long c_time;

void setup() {
// Restore settings
  boardrate = EEPROM.read(EE_boardrate);
  F_color = EEPROM.read(EE_F_color);
  B_color = EEPROM.read(EE_B_color);
  rotation = EEPROM.read(EE_rotation);
  C_Size = EEPROM.read(EE_C_Size);
  if(C_Size == 0) C_Size = 1;
  echo = EEPROM.read(EE_Echo);

//Keyboard Serial Begin
  keyboard.begin(DataPin, IRQpin, PS2Keymap_Japanese);
  Serial.begin(rate[boardrate]);
  DEBUG_PRINTLN(F("CHUM_Terminal V0.1"));

// TFTLCD Initialize
  tft.reset();
  uint16_t identifier = tft.readID();
  tft.begin(identifier);

  refresh(); //Refresh display
  tft.print(F("F1 for Setting"));
  refresh(); //Refresh display
  tft.print(F("F1 for Setting"));

// Setting
  if (keyboard.available()) {
    c = cc = keyboard.read();
    DEBUG_FPRINT(c,HEX);
    DEBUG_PRINT(" ");

    if(c == 0xc2){
      while(c != 0x1B) { // Wait ESC
        switch(c){
          case 0x81:  // F1 Help
            tft.fillScreen(color[B_color]); // Screen clear
            tft.setTextWrap(T_Wrap); //Set Text Wrap around
            tft.setCursor(0,0);
            DEBUG_PRINTLN(F("F1 :Help"));
            tft.println(F("F1 :Help"));
            tft.println(F("F5 :Save EEPROM"));
            tft.println(F("F6 :Local Echo"));
            tft.println(F("F7 :Board Rate"));
            tft.println(F("F8 :Reverse Color"));
            tft.println(F("F9 :Back color"));
            tft.println(F("F10:Font color"));
            tft.println(F("F11:Rotation"));
            tft.println(F("F12:Font Size"));
            tft.println();
            tft.println(F("-ESC- for Exit from Help"));
          break;

          case 0x85:  // F5 Save Settings to EEPROM
            F5_Set_EEPROM();
          break;
     
          case 0x86:  // F6 Local Echo On/Off
            F6_sw_echo();
          break;

          case 0x87:  // F7 BoardRte
            F7_BoardRate();
          break;
     
          case 0x88:  // F8 Reverse color
            jj = B_color;
            B_color = F_color;
            F_color = jj;
            refresh();        
          break;
     
          case 0x89:  // F9 Back ground color KCMYGBR
            B_color += 1;
            if( B_color >7) B_color =0;
            refresh();
          break;
     
          case 0x8A:  // F10 Font Color WRGBMYC
            F_color -= 1;
            if( F_color < 0) F_color =7;
            refresh();
          break;
     
          case 0x8B:  // F11 Rotation 0,1,2,3
            rotation +=1;
            if(rotation > 3) rotation=0;
            refresh();
          break;
     
          case 0x8C:  // F12 Zoom 1,2,3,4
            C_Size +=1;
            if(C_Size > C_Max) C_Size=1;
            refresh();
          break;
             
          default:
            ;
          break;

        }
        while (!keyboard.available()) ;
        cc = keyboard.read();
        c = cc;
        DEBUG_FPRINT(c,HEX);
        DEBUG_PRINT(" ");
      }
      refresh();
    }
  }
  refresh();
  c_time = millis();
}

//************************************************//
void loop() {
    C_Line = tft.getCursorY();

// Keyboard
    if (keyboard.available()) {
      off_Cursor();
      c = cc = keyboard.read();
      DEBUG_FPRINT(c,HEX);
      DEBUG_PRINT(" ");

      switch(c){
        case 0x0d:  //CR
          if ( echo != 0) New_Line();
          Serial.println();
        break;

        case 0x0a:  //LF
          if ( echo != 0) New_Line();
          Serial.println();
        break;

        case 0x08:  //Back Space or Left arrow
          if ( echo != 0) Back_Space(1);
          Serial.print(cc);
        break;

        case 0x7F:  //Delete
          if ( echo != 0) Delete_Space();
          Serial.print(cc);
        break;
     
        case 0x8d:  // Up
          Serial.write(0x1b);Serial.write(0x5b);
          Serial.write(0x41);
        break;

        case 0x8e:  // Down
          Serial.write(0x1b);Serial.write(0x5b);
          Serial.write(0x42);
        break;

        case 0x8f:  // Right
          Serial.write(0x1b);Serial.write(0x5b);
          Serial.write(0x43);
        break;

        case 0x90:  // Left
          Serial.write(0x1b);Serial.write(0x5b);
          Serial.write(0x44);
        break;

        default:
          if ( echo != 0){
            tft.print(cc);
            New_Line();
          }
          Serial.write(c);
        break;
      }
    }

//Serial
    if(Serial.available()){
      off_Cursor();
      c = cc = Serial.read();

      switch(c){
        case 0x0d:  //CR
          tft.setCursor( 0, tft.getCursorY());
//          New_Line();
        break;

        case 0x0a:  //LF
          tft.println();
          New_Line();
        break;

        case 0x08:  //Back Space
          Back_Space(1);
        break;
     
        case 0x7F:  //Delete
          Delete_Space();
        break;

        case 0x1b:  //ESC Sequence
          while(!Serial.available());
          c = cc = Serial.read();
          if(c != 0x5b ) break;
          count = 0;
          do{
            while(!Serial.available());
            c = cc = Serial.read();
            if( c == 0x4b ){  //delete line
              Clear_line(tft.getCursorX(),tft.getCursorY());
              break;
            }else if(c == 0x44){ //Number
              if(count == 0) count = 1;
              Back_Space(count);
              break;
            }else if( (c >= 0x30) && (c <= 0x39)){ //Number
              count = count*10 + (c -0x30);
            }else {
              break;
            }
          }while(1);
        break;

        default:
          tft.print(cc);
          New_Line();
        break;
      }
    }
  if ( (millis()-c_time) > blink_speed ){
    if(toggle){
      tft.setTextColor(color[F_color]);
      tft.print("_");
    }else{
      tft.setTextColor(color[B_color]);
      tft.print("_");
    }
    Back_Space(1);
    tft.setTextColor(color[F_color],color[B_color]);
    toggle = !toggle;
    c_time = millis();
  }
}

void off_Cursor(){
  tft.setTextColor(color[B_color]);
  tft.print("_");
  Back_Space(1);
  tft.setTextColor(color[F_color],color[B_color]);
}

void Delete_Space(){
      tft.print(" ");
      jj = tft.getCursorX() - 12 * C_Size;
      if( jj < 0) jj=0;
      tft.setCursor( jj, tft.getCursorY());
}

void Back_Space(int pp){
      jj = tft.getCursorX() - 6 * C_Size * pp;
      if( jj < 0) jj=0;
      tft.setCursor( jj, tft.getCursorY());
}

void  New_Line(){
      jj = tft.getCursorY();
      if( C_Line < jj ){
        if(jj >= End_Line){
          tft.setCursor(0, 0);
          jj = 0;
        }
//        DEBUG_PRINT(" Y=");
//        DEBUG_PRINTLN(jj);
        C_Line = jj;
        Clear_line(tft.getCursorX(),jj);
      }
}

void Clear_line(int xx, int yy){
        tft.setTextWrap(LOW);
        tft.print(F("                                                       "));
        tft.setCursor(xx,yy);
        tft.setTextWrap(T_Wrap);
}

void  F6_sw_echo(){
          tft.fillScreen(color[B_color]); // Screen clear
          tft.setCursor(0,0);
          DEBUG_PRINTLN(F("F6 :Local Echo ON/Off"));
          if( echo == 0) {
            tft.println(F("Local Echo OFF"));
          }else{
            tft.println(F("Local Echo ON "));
          }
          tft.println();
          tft.println(F("ESC->Exit"));
          while(c != 0x1B) { // Wait ESC
            while(!keyboard.available()) ; // wait key
            c = keyboard.read();
            tft.setCursor(0,0);
            tft.println();
            if(keyboard.available()) c = keyboard.read();
            if(c != 0x1B) echo ^= 0x0001 ;
            if( echo == 0) {
              tft.println(F("Local Echo OFF"));
            }else{
              tft.println(F("Local Echo ON "));
            }
          }
          refresh();
}

void  F7_BoardRate(){
          tft.fillScreen(color[B_color]); // Screen clear
          tft.setCursor(0,0);
          DEBUG_PRINTLN(F("F2 :BoardRate"));
          Serial.end();
          tft.println("        ");
          tft.println("bps");
          tft.println();
          tft.println(F("ESC->Exit"));
          while(c != 0x1B) { // Wait ESC
            tft.setCursor(0,0);
            tft.print(rate[boardrate]);
            tft.println("      ");
            while(!keyboard.available()) ; // wait key
            c = keyboard.read();
            if(keyboard.available()) c = keyboard.read();
            if(c != 0x1B) boardrate += 1;
            if(boardrate > 7) boardrate = 0;
          }
          Serial.begin(rate[boardrate]);
          refresh();
}

void   F5_Set_EEPROM(){
          EEPROM.write(EE_boardrate,boardrate);
          EEPROM.write(EE_F_color,F_color);
          EEPROM.write(EE_B_color,B_color);
          EEPROM.write(EE_rotation,rotation);
          EEPROM.write(EE_C_Size,C_Size);
          refresh();
}

void F1_Help(){
          tft.fillScreen(color[B_color]); // Screen clear
          tft.setTextWrap(T_Wrap); //Set Text Wrap around
          tft.setCursor(0,0);
          DEBUG_PRINTLN(F("F1 :Help"));
       
          tft.println(F("F1 :Help"));
          tft.println(F("F5 :Save EEPROM"));
          tft.println(F("F7 :Board Rate"));
          tft.println(F("F8 :Reverse Color"));
          tft.println(F("F9 :Back color"));
          tft.println(F("F10:Font color"));
          tft.println(F("F11:Rotation"));
          tft.println(F("F12:Font Size"));
          tft.println();
          tft.println(F("-ESC- for Exit from Help"));
          while(c != 0x1B) { // Wait ESC
            c = keyboard.read();
            delay(200);
          }
          refresh();
}

void refresh(){
  tft.fillScreen(color[B_color]); // Screen clear
  tft.setTextWrap(T_Wrap); //Set Text Wrap around
  tft.setRotation(rotation);
  tft.setCursor(0,0);
  tft.setTextColor(color[F_color],color[B_color]);  tft.setTextSize(C_Size);
  tft.println(F("CHUM_Terminal V0.1"));
  if(rotation == 0 || rotation == 2 ){
    End_Line = D_Hight;
  }else{
    End_Line = D_Width;
  }
}

MP3プレイヤー DFPlayer mini 覚書

MP3プレイヤー DFPlayer mini を使うための参考URL

DFPlayer Mini SKU:DFR0299 - Robot Wiki - DFRobot








ユニバーサルスイッチと組み合わせて、おしゃべりリモコンにしてみました。


CHUM-ESPW02BB(esp8266) でLUAを動かす!

東芝のFlashAirにLUA機能があるということで、試してみようとしましたが、LUAが使えるのは、Ver3以上、私が持っているFlashAirはVer2でだめでした。

 そこで、CHUM-ESPW02BB(esp8266)では、どうかというと、これができます。

 以下、やってみたことと、注意点をまとめました。

使用環境
CHUM-ESPW02BB(esp8266)
・UBS-Serial ft232
実験用ATXPower

※概要

LUA:とはこれです  Script言語のひとつですね。
LUA LOGO

LUACHUM-ESPW02BB(esp8266)で使うには、NodeMCUと言うファームウェアが使えます。
NodeMCU LOGO

NodeMCUとはこれです 最近の中国ではいろんなものが出来ています。(気が付けば、ハードはもちろんソフトもツールもすべて中国製? 日本ガンバ!)


NodeMCUのインストール

関連データはGitHubにあります。 最新版のファームウェアはこちらのページから

2016年4月5日現在は、
nodemcu_float_0.9.6-dev_20150704.bin
nodemcu_integer_0.9.6-dev_20150704.bin
この2つですが、今回はさほど容量が違わないような気もするので、とりあえずfloat版を選んでみます。

これを、適当なフォルダにダウンロードしておきます。

次に、CHUM-ESPW02BB(esp8266)に書き込むわけですが、専用のツールがあります。
NodeMCU flasherです。Githubからダウンロードし、”ESP8266Flasher.exe”を実行します。
(Win64とWin32を選ぶ必要があります。)


NodeMCU flasherの設定
 ・COM Port を CHUM-ESPW02BB(esp8266) と接続したCOMPortに設定します。(ここではCOM10でした)
 ・Config タブに移って、先ほどダウンロードしたファームのファイルパスを設定します。
  赤丸のギアマークのようなアイコンをクリックするとファイルが選べます。 ファイルを選択すると赤四角のところに、入力されます。

 ・ここで、重要な確認 CHUM-ESPW02BB(esp8266) のジャンパを
Down Load Mode にします。

 ・いよいよ、Flash(F) をクリックします。 書き込んでいる最中は、下記のような表示になりました。


 ・終わったら、再度重要な確認 CHUM-ESPW02BB(esp8266) のジャンパを
Flash Boot Mode にします。


ESP8266 Lua Loader のインストール

 ・これで、シリアル端末を接続すればLUAが使えるようになりましたが、ここでも、使い勝手のよいツールが用意されています。
ESP8266 Lua Loaderです。 私は、このページからVer0.91をインストールしました。

このツールを使うと、何かと便利ですね。 

虫型ロボット作り教室 in 産業科学館

山形県産業科学館で「虫型ロボット作り」を開催しました。

サーボモーターと超音波センサでロボットを作って、ArduBlockでプログラムを作って、遊びました。



教室で使ったプログラム等は、下記のURLから"BUG_ROBO_SAMPLE.zip"をダウンロードできます。

https://drive.google.com/open?id=0B3gGy5tYPZblY25SWTF1UEpUTjQ

インストール方法
1.ダウンロードしたファイルをすべて展開します。
2.当日配ったテキストを参考に、ArduinoIDEとUSBドライバーをインストールします。
3.展開したフォルダから以下のようにデータをコピーしてください。
 ・**\BUG_ROBO_SAMPLE\my_doc\arduino を パソコンのドキュメントフォルダーにコピーします。
 ・**\BUG_ROBO_SAMPLE\programfiles\arduino を ArduinoIDEをインストールしたフォルダーにコピーします。

これで、準備完了です。

Good Luck !!