なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

Blynkを使ってスマートフォンからAdafruit Feather M0 Bluefruit LEを制御する方法

Posted by arms22 on 2016年12月21日 0  0

Blynkとは?


Blynk_Architecture
Blynkプラットフォームのアーキテクチャ

インターネットを介してArduinoやRaspberry等を遠隔制御するアプリを構築するためのiOS/Android向けのプラットフォームです。ウィジェットと呼ばれる部品をドラッグ&ドロップで画面に配置することで、デバイスを制御するためのリッチなUIを簡単につくることができます。またデバイス側のコードを記述することなく直接ハードウェア(デジタルピンまたはアナログピン)を制御することができます。

基本的にデバイスとスマートフォンはBlynk Cloudを介して通信するのですが、最新のバージョンではBLE(Bluetooth Low Energy)を使ってデバイスと直接通信することができるようになりました。今回はこの機能をつかってFeather M0を制御してみたいと思います。


Blynkアプリのインストールとアカウントの作成

まずはBlynkアプリをインストールします。インストールが終わったらBlynkアプリを起動し、新しいアカウントを作成してください。Blynkアプリで作成したプロジェクトデータはクラウド上で管理されるので、スマートフォンが変わってもプロジェクトを作り直す必要はありません。

For iOS
https://itunes.apple.com/us/app/blynk-control-arduino-raspberry/id808760481?ls=1&mt=8

For Android
https://play.google.com/store/apps/details?id=cc.blynk


Blynkプロジェクトの作成

Blynkテストプロジェクト
ロボットコントローラー風のUI

Blynkアプリを起動して”Create New Project”をタップし新しいプロジェクトを作成します。HARDWARE MODELはArduino Zeroを選択します。AUTH TOKENはArduinoのスケッチに埋め込むのでE-Mailで自分宛てに送信しておきましょう。空っぽのプロジェクト画面が開いたら画面をタップして、上の画像のようにBLEウィジェット、ジョイスティック、ラベル、LED 2個を配置します。

Blynkテストプロジェクト_ウィジェット設定
ウィジェットの設定

ウィジェットにピン、ラベル、値の範囲等設定します。ウィジェットには仮想ピン(V1〜V255)を割り当てます。BlynkアプリとFeather M0は仮想ピンを通してデータのやり取りを行います。実際のハードウェアの制御はBlynkアプリから送られたきたデータをもとにFeather M0で行います。


ハードウェア

Blynkテスト_ブレッドボード
実態配線図

Blynkテスト_回路図
回路図

DCモータを動かしてみたかったのですが、回路がやや複雑になるのでとりあえずLEDをモータに見立てて制御してみます。ピン12とピン11にLEDを接続します。A0に接続している半固定抵抗は使用していないので省略してOKです。


BLEライブラリとBlynkライブラリのインストール

Arduino IDEにFeather M0 Bluefruit LE用のBLEライブラリとBlynkライブラリをインストールします。Arduino IDEを起動してライブラリマネージャを開き(スケッチ > ライブラリをインクルード > ライブラリを管理)、Adafruit BluefruitLE nRF51Blynkをインストールします。


サンプルスケッチ

Blynkライブラリのサンプルスケッチをベースにジョイスティックデータの取得とLEDの制御、Blynkアプリ側のラベルとLEDの制御を追加しています。auth[]の中身をAUTH TOKENに書き換えてFeather M0に書き込んでください。


BlynkアプリからFeather M0にデータを送る
次のように仮想ピンに対応するBLYNK_WRITE関数を実装し、param.asInt()で値を取得します。
// 仮想ピンV1の書き込み
BLYNK_WRITE(V1)
{
 // 仮想ピンV1を通してジョイスティックの値を読み取る
 int x = param[0].asInt();
 int y = param[1].asInt();
 (省略)
}

Feather M0からBlynkアプリにデータを送る
次のように仮想ピンに対応するBLYNK_READ関数を実装し、Blynk.virtualWrite()で値を書き込みます。
// 仮想ピンV2の読み込み
BLYNK_READ(V2)  // ウィジェットの読み込み周期で呼び出される(1秒〜)
{
 // 仮想ピンV2にスピードを書き込む
 Blynk.virtualWrite(2, speed);
}

ウィジェットをPUSHモードに設定すると、任意のタイミングで値を書き込めます。


動かし方

IMGP1314

Feather M0を通電した状態でBLEウィジェットの設定画面を開き、”Connect BLE Device”から”Adafruit Bluefruit LE”を選びます。プロジェクト画面に戻って画面右上の三角をタップするとウィジェットが動き出します。ジョイスティックをぐりぐりするとFeather M0につながったLEDが点灯し、ジョイスティックを倒し込んだ量に応じた値=Speedがラベルに表示されます。ジョイスティックを前に倒すとFWD-LEDが、後ろに倒すとBCK-LEDが点灯します。


参考記事

Blynk - Getting Started
http://docs.blynk.cc/#getting-started


Adafruit Feather M0 Bluefruit LE
スイッチサイエンス
売り上げランキング: 172,942

Arduino Zero/M0 互換ボード「Adafruit Feather M0 Bluefruit LE」の開発環境を準備する。

Posted by arms22 on 2016年12月03日 3  0

Adafruit Feather M0 Bluefruit LE

Arduino UNOよりちょっとだけ速くてBLEが使えるボードが欲しくなったので、Arduino Zero/M0 互換のAdafruit Feather M0 Bluefruit LE を買いました。このボードの紹介と開発環境の構築手順についてまとめておきます。


Adafruit Feather M0 Bluefruit LEとは?


Adafruit社製のArduino Zero/M0互換ボードです。コアはArduino Zero/M0と同様、Atmel社のARM Cortex M0プロセッサ「ATSAMD21G18」を搭載していて、クロックは48MHz、3.3Vで動作します。またNordic Semiconductor社のnRF51822チップを採用したBLEモジュール「MDBT40」を搭載しています。

主な仕様:
  • ATSAMD21G18搭載
  • 動作クロック:48MHz
  • 動作電圧:3.3 V
  • FLASH:256 KB
  • RAM:32 KB
  • EEPROM:なし
  • GPIO:20 ピン
  • PWM:8 ピン
  • アナログ入力:10 ピン
  • DAC出力:1ピン
  • インターフェース:シリアル、I2C、SPI
  • リチウムポリマー充電回路搭載


Arduino IDEのインストール

続いて開発環境の構築手順について解説します。まずはArduinoのウェブサイトでArduinoソフトウェア(以下、Arduino IDE)の最新バージョンをダウンロードします。(記事執筆時点で1.6.13が最新)

Arduino - Software
https://www.arduino.cc/en/Main/Software


SAMDコアインストール

次にSAMDボード向けのコンパイル環境をインストールします。
  1. ボードマネージャを開く(ツール > ボード > ボードマネージャ)
  2. Arduino SAMD Boards (32-bits ARM Cortex-M0+)」をインストール



Adafruit SAMDボード情報追加

AdafruitのSAMDボード情報(Adafruit Feather M0)を追加します。

  1. 環境設定を開く(Arduino > Preferences…)
  2. 「追加のボードマネージャのURL」に次のURLを入力
    https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
    ※他のURLがすでに入力されている場合、それぞれのURLをカンマ”,”で区切って入力してください。
  3. ボードマネージャを開く(ツール > ボード > ボードマネージャ)
  4. Adafruit SAMD Boards をインストール


Arduino/Adafruit SAMDボード
ここで一旦、Arduino IDEを再起動。


サンプルスケッチ

環境が整ったのでテストとして次のスケッチを書き込み、LEDの点滅動作を確認します。


次のようにボードを設定し、書き込みボタンを押します。しばらくしてLEDが1秒周期で点滅はじめたら書き込み成功です。

  • ツール→ボード→Adafruit Feather M0 (USB Native Port)
  • ツール→シリアリポート→Adafruit Feather M0が繋がっているポートを指定してください

AdafruitのWebサイトではBLEモジュールを使ったアプリケーションの例が多数紹介されています(参考URLを参照)。次回はBLEモジュールを使ったスケッチの書き方について紹介したいと思います。


参考URL

Adafruit Feather M0 Bluefruit LE - スイッチサイエンス
https://www.switch-science.com/catalog/2752/

Adafruit Feather M0 Bluefruit LE : Adafruit Industries, Unique & fun DIY electronics and kits
https://www.adafruit.com/product/2995

Overview | Adafruit Feather M0 Bluefruit LE | Adafruit Learning System
https://learn.adafruit.com/adafruit-feather-m0-bluefruit-le/overview


Adafruit Feather M0 Bluefruit LE
スイッチサイエンス
売り上げランキング: 172,942


Adafruit Feather M0 Basic Proto
スイッチサイエンス
売り上げランキング: 260,974


ThingSpeakにセンサーデータを送ってグラフに表示する - Wifi温度湿度計の製作(10)

Posted by arms22 on 2016年11月04日 0  0

ThingSpeak-温度湿度グラフ
ESP8266 with HDC1000 Module Temperature/Humidity Monitor in Kyoto - ThingSpeak

さていよいよ大詰め、ThingSpeakにセンサーデータを送ってグラフに表示させるよ!


ThingSpeakって何ぞ?


ThingSpeakはIoT向けのクラウドデータサービスです。デバイスから送られた来たデータを貯めて、データを解析したりグラフに表示したり、データをトリガーに何らかのアクション(ツイートするとか)を起こしたりできます。Arduino用のライブラリがあるので簡単にデータを送ることができます。


アカウントの登録

まずはThingSpeakのページを開いて新しいアカウントを作成しましょう。Sign UpをクリックしてユーザID、メールアドレス、タイムゾーン、パスワードを入力しCreate Accountボタンをクリック。


チャンネルの作成


チャンネル作成

次にチャンネルを作成します。チャンネルには8種類のデータ・場所・状態を登録することができます。場所やデバイス毎にチャンネルを分けて作成するとよいでしょう。ここでは4つ(温度・湿度・露点温度・Vcc電圧)のセンサーデータを書き込むためのチャンネルを作成します。

  1. メニューバーの Channels > MyChannels をクリック。
  2. New Channel ボタンをクリック。
  3. 以下の情報を入力。
    Name(チャンネルの名前)
    Field1 Temperature(フィード1の名前)
    Field2 Humidity(フィード2の名前)
    Field3 Dew Point(フィード3の名前)
    Field4 Vcc(フィード4の名前)
    Make Public(公開しても良いならチェック)
  4. Save Channel ボタンをクリック


チャンネルIDと書き込み用のAPIキーの取得


チャンネルIDとAPIキー

センサーデータの書き込みにはチャンネルIDと書き込み用のAPIキーが必要です。メニューバーの Channels > MyChannels をクリックして、作成したチャンネルを開きます。Channel ID と書かれた6桁の数字がチャンネルID、API Keys をクリックして Write API Key と書かれた英数字の文字列が書き込み用のAPIキーです。


Arduino用ライブラリのインストール


ThingSpeakライブラリ

ThingSpeakにセンサーデータを書き込む為のArduino用ライブラリをインストールします。ライブラリはArduino IDEのライブラリマネージャからインストールします。Arduino IDEを起動しライブラリマネージャを開きます(スケッチ > ライブラリをインクルード > ライブラリを管理)。検索フィルターに“thingspeak”を入力し、"ThingSpeak by MathWorks"を選んでインストールボタンを押します。


スケッチ

5分毎にセンサーデータをThingSpeakに送るスケッチです。Wifi設定、ネットワーク設定、ThingSpeak設定は環境に合わせて変更してください。


処理の流れは次のとおりです。
  1. Vcc電圧を取得
  2. Vcc電圧が3.05V未満ならバッテリーの過放電を防ぐために無限スリープに入る
  3. 温度・湿度データを取得
  4. 露点温度を計算
  5. Wifi接続(リトライ3回まで)
  6. ThingSpeakに接続
  7. センサーデータを送信
  8. 5分間ディープスリープに入る
  9. 1に戻る

また消費電流を減らすため下記の対策を入れています。基本方針は「余計な電波を出さない・動作時間は短く」です。
  • ステーションモードに設定
    初期モードはステーション+APモード。APモードではSSIDを通知するためにビーコンを送信しています。このビーコンを送信しないようステーションモードに変更しています。
  • LightSleepモードに設定
    データシートによるとModemSleepよりLightSleepのほうが消費電流が少ないのでこのモードに設定しています。
  • 固定IPアドレス設定
    DHCPのやり取りが不要になるので余計な通信が減って接続時間が短縮されます。

ThingSpeak接続時にIP直指定にするとThingSpeakへの接続時間が短くなるはずですが今回は試していません。


グラフを表示する

メニューバーの Channels > MyChannels から先ほど作成したチャンネルを開くと、ThingSpeakに送ったデータが自動的にグラフとして表示されます。グラフ右上の鉛筆マークを押すとグラフをカスタマイズすることができます。


動作時間

1000mAの電池で約20日動作しました。1000mAで30日を目標にしていたのですがなかなか厳しいです。データを溜めてまとめて送るなど対策が必要です。ただThingSpeakは15秒に1回しかAPIを呼び出せないのでまとめて送るとその分動作時間が延びてより多く電力を消費してしまいます。これについてはまた次回。




ワイヤレスマウスの修理

Posted by arms22 on 2016年11月04日 0  0

無線マウスを修理

壊れて動かなくなっていたワイヤレスマウス(型番:BSMOW07BW)を修理しました。写真中央のダイオードがグラグラしていて接触不良を起こしていました。子供が「新幹線、新幹線」といって遊んでいる時に何度も落としていたので半田が割れてしまったのでしょう。ハンダ面のランドが剥がれていたので部品面からはんだづけし直したところ正常に動くようになりました。

黒いワイヤは電池ボックスのマイナス端子につながっています。このダイオードは電池の逆挿入防止用だと思いますがなぜか立てて実装されていました。後から無理やり実装した感じがします。

無線(2.4GHz)光学式マウス 5ボタン/横スクロールタイプ | バッファロー 
http://buffalo.jp/products/catalog/supply/input/mouse/wireless-optical/bsmow07/

HDC1000温湿度センサーモジュールから温度と湿度を読み取る - Wifi温度湿度計の製作(9)

Posted by arms22 on 2016年10月15日 0  0

IMGP1291
さて今回は秋月電子の「HDC1000温湿度センサーモジュール」から温度と湿度を周期的に読み取って、シリアルポートに出力する方法を紹介しまします。ついでにESP-WROOM-02のVCC電圧も監視しちゃうよ。


HDC1000温湿度センサーモジュールの接続


秋月電子:HDC1000温湿度センサーモジュールピン配置図
HDC1000温湿度センサーモジュールのピン配置図

ESP-WROOM-02 vs HDC1000温湿度センサーモジュール
3.3V -> +V(1)
IO4 -> SDA(2)
IO5 -> SCL(3)
GND -> GND(5)

SDA/SCLのプルアップ抵抗はHDC1000温湿度センサーモジュール実装されているので追加不要です。RDYは今回使わないので未接続でOKです。ESP-WROOM-02を連続して動かしていると結構熱を持つので、センサーモジュールはできるだけESP-WROOM-02から離れた位置に実装するのが良いでしょう。


ライブラリのインストール

Adafruitが配布しているHDC1000用のライブラリをインストールします。

  1. Arduino IDEのライブラリマネージャー(ツール > ライブラリをインクルード > ライブラリを管理)を開く
  2. 検索フィルターに“hdc1000”を入力
  3. Adafruit_HDC1000_Libraryを選んでインストール


スケッチ

温度と湿度を読み出して露点温度を計算し温度・湿度・露点温度ついでにVcc電圧をシリアルポートに出力し、15秒間ディープスリープに入ります。以降、これを繰り返します。ESP.getVcc()でVcc電圧を読み取っています。単位はmV(3.3Vの場合、3300)なので1000で割ってシリアルに出力しています。Vcc電圧の読み取りには少しお作法が必要でsetup関数の前に以下の文を追加する必要があります。

ADC_MODE(ADC_VCC);



シリアルモニターを開いて、ボーレートを115200に設定すると以下のように表示されます。
※実際には下記表示とともにESP-WROOM-02が起動時に出力するメッセージが文字化けして表示されます。

Temperature: 23.33 Humidity: 49.27 Dew Point: 12.07 Vcc: 3.20


参考URL

HDC1000使用 温湿度センサーモジュール: 組立キット 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gM-08775/


ESPr Developer(ESP-WROOM-02開発ボード)
スイッチサイエンス
売り上げランキング: 85,465