4 posts tagged with "esp8266"

View All Tags

CocoaBitというオリジナルBitを作った話

CocoaBitというlittleBits拡張モジュールを作ってみて気がついたことを書き連ねておきます。

CocoaBitとは

まずはカンタンにCocoaBitについて説明していこうと思います。

CocoaBitとは、cloudBitと呼ばれるインターネットと通信ができるモジュールが日本では技適のため使えないため、開発された拡張モジュール(拡張Bit)です。

私が作成しているNefryをベースとしており、NefryのメリットであるWiFiやモジュールの設定を簡単に出来る点を引き継ぎ、littleBits向けにさらにカスタマイズしています。

(CocoaBitはまだ販売されてませんが、反響があれば…

CocoaBitのサイトはこちら

cocoaBit

カンタンにCloudBitがどのようなものか分かったところで作ってみて気が付いたメリットデメリットについて話してみようと思います。

メリット

手軽に試せる

なんといってもこれが一番のlittleBitsと繋げられるメリットだと思います!

普通の電子工作であると半田付けが必要だったり、ブレッドボードにピンを何本も刺さないといけなかったりするのが、littleBitsなら繋ぐだけでいけます!磁石で繋がるので間違えることもない!

子どもでもあそべる

向きを間違えないため、こどもに任せてしまっても問題なく作ることができます!

子どもももちろんですが大人でもロジックBitなどもあるので充分に遊ぶことが出来ます!

デメリット

とりあえずお高い 

littleBits自体セットで販売などもされているため若干安くなったりしますが、それでもお高い…

これは特に多数のBitがあるとより楽しめるのですが、揃えるまでが…

ときどき接触がわるいときがある

磁石で接続しているため仕方無いのですがカンタンにとれてしまいます。それはlittleBitsの手軽に繋げられるとこと関わるので難しいところです…

(Bitを留められるボードもあるのでそれで解決するところですが…

bitの形に制限がある

これもlittleBitsの世界なので仕方無いところですが、公式からこのようなサイズで作るといいよ、という情報が出ています。

(これも無視して作ることも出来ますが、littleBits同士キレイに揃うといいので出来るだけ合わせましょう。

オリジナルのBitをつくるまで!

私の備忘録を兼ねて今回のCocoaBitを作成した流れを説明していこうと思います。

まずは、どんなものを作るのか検討しよう。

どんなものを作るのか検討すれば、必要な部品数が判明すると思われます。その部品から必要となるであろうサイズを割り出します。

そのサイズからその部品が収まるBitのサイズを選びます。

こちらのサイト内にあるHDK manualのリンクをクリックします。

よりプロフェッショナルなTIPSについてはHDK manual やTips & Tricks もチェックして下さい。

ファイルがダウンロードされるのを待って、Design\Design Manual\PDFsの中にあるUser Interface Considerations for littleBits Module Design.pdfを開き部品が収まるサイズを探します。

無事に見つかったら図の下にある英語の文字を覚えておきましょう。

さくっと回路を起こしていこう

eagleのテンプレートファイルがGitHubで公開されているのでそれをベースに作成するのがお勧めです。

私はKicadの方が好きなので、採寸をまねて作成しました。 こんな感じにできれば、問題ありません。

回路ができれば、SeeedStudioさんやElecrowさんを作成してもらいましょう!

## 部品をそろえよう

まずは、littleBitsの公式サイトからBITSNAPSというlittleBitsの両端を購入しましょう。

もしくは、littleBitsのHardware Development Kitを日本の代理店であるKORGさんから購入することもできます。

あとはほかに必要な部品を購入していてください。

組み立てよう!

BITSNAPSともろもろの部品をつければ、無事にオリジナルの拡張Bitが出来上がりました!

このあたりもSeeedStudioさんやElecrowさんの部品実装サービス使うと大変便利です。 CocoaBitも作成していただいています。

#まとめ

そもそも、littleBitsの拡張することができるなんて思いませんでした。 BitSnaps自体がちょっと高価ではありますが、自分好みのものをつくれるメリットは大きいと思います。

回路を作成するなど難易度は高めですが、完成度も高いので是非お勧めします! よいlittleBitsライフを!

Azure IoT HubをESP8266で使おう!

日本での発売から一年がたち多数の作例が出てくる「ESP8266」(ESP-WROOM-02)をもっと使いこなしてみませんか?

今回はAzureのサービスの一つであるIoTHub、それを簡単に扱えるライブラリーを作ったので紹介してみようと思います。

ちょこっと宣伝

ところどころで出てくるESP8266の基板ですが、私が作成した「Nefry」(ねふりー)という基板を使っています。

dotstudioさんにて販売中です!!

USBに直接繋げられたり、Webページ上でWiFiの設定やESP8266の端末設定ができるようになっていたりとESP8266をより簡単に扱えるものになっています。

詳しくはLigブログで記事をいくつか載せていますのでご覧ください。

自作したオリジナルIoTデバイス「Nefry」とインターネットを繋いでみた

Webサービス同士を連携できる「IFTTT」と自作IoTデバイスを繋いで生活を便利にしてみた

Azure IoT Hub って?

IoT Hubは、その名の通りIoTデバイスとクラウドを繋ぐHubとなるサービスです。 似たようなサービスとして「Event Hubs」がありますが、Event Hubsとの大きな違いは2つあります。

IoTHubの優れた点

  • デバイスとクラウドとの双方向通信が可能。(Event Hubsはデバイス→クラウドの一方のみ)
  • デバイス毎にIDを登録して認証する為、よりセキュアに利用できる。(Event HubsはEvent Hubsごとの許可)

http://qiita.com/hiiyan0402/items/9c93d9673114675a57d4

用意するもの

IoTHubで通信をしてみる

今回はESP8266からIoTHubで通信するところまでを作っていきます。

Azure IoTHubの設定

それでは、AzureにログインしてIoTHubを実際に作っていきましょう!

Azure ポータルを開いていきます。

新規からモノのインターネット(IoT)をクリックして、IoTHubをクリックします。これから必要な設定を行っていきます。

無事にIoTHubが開かれると複数の入力欄が出るので写真を参考に入力欄を埋めていきましょう。 それでは、必須項目であるIoTHubの名前を入力してください。この名前はドメインでも使われますので他の方と重複するとエラーが出ます。入力欄の右端が緑のチェックが入れば大丈夫です。 次に、価格とスケールティアを変更していきます。この際にFreeを必ず選んでください。Standardを選んだまま作成してしまうと、後からFreeに変更することができず、再度作り直すことになります。

Freeを選択したらクリックして反映させてください。

リソースグループは既存ものがあれば、それを使って頂いてもかまいませんが、今回は初めてだという前提で、新規作成で好きなグループ名を入力してください。

Azureサーバーがある場所を指定することができます。東日本、西日本と選べますのでお好みでどうぞ。

ここまで問題なくできていれば、作成ボタンをクリックしてIoTHubをデプロイしていきます。

数分かかりますのでしばしお待ちを…

無事にIoTHubのデプロイが終わるとこのような画面が表示されます。 この画面では先ほど設定した内容が見れるほか、IoTHubの使用状態を確認することができます。

デバイスを繋げるために必要な設定を行っていきます。 共有アクセスポリシーからiothubownerをクリックし、プライマリキーをコピーします。 このとき写真で示してある部分をクリックすると簡単にキーをコピーすることができます。

このプライマリキーは次の作業で使用します。

この作業からDevice Explorerというツールを使っていきます。 このツールはWindows専用になります。MacやLinuxの場合iothub-explorerを使うようですが、今回は取り扱いません。

Device Explorerのダウンロード

こちらのリンクからダウンロードしてインストールをよろしくお願いします。

インストールが終わったところでDevice Explorerを使っていこうと思います。

このツールでIoTHubに接続できる端末の登録、削除、ほかにはデバイスからIoTHubへの通信モニターになったり、IoTHubからデバイスにデータを送ることができるなどIoTHubに必須のものとなっております。

説明が長くなりましたが、それではこのDevice Explorerに先ほどのプライマリキーを入力してUpdateをクリックしてください。

プライマリキーが合っていれば、このような表示がされます。この表示がでれば先ほど作ったIoTHubと連携ができるようになります。

これからIoTHubに接続できるデバイスの設定をしていこうと思います。

この作業はデバイスごとにIDを割り振る作業になります。 ManagementからCreateをクリックします。

Createをクリックするとこのような画面が出ますので、Device IDに接続するデバイス名を入力してください。

入力が終わったらCreateをクリックしてください。

無事にデバイスが作れると先ほどのDevice IDを持ったものが増えているはずです。

無事に作成できていれば、次はデバイスに必要な情報をコピーしておきましょう。 今回作成したDevice IDをクリックすると青色の欄が移動しますので、選択された状態で右クリックするとCopy connection string for selected deviceを選んでクリックしてください。

そうすると必要な情報がコピーされますので、その情報をESP8266に書き込むプログラムに貼り付けます。

デバイスの設定

ArduinoIDEとArduino core for ESP8266 WiFi chip(https://github.com/esp8266/Arduino) の導入が終わっている前提で解説していきます。 導入が済んでなければ、Qiitaに情報がありますのでそちらをご覧ください。

それでは、AzureIoTHubライブラリー(https://github.com/wamisnet/Azure-iothub-mqtt-esp8266) をこちらのリンクから移動して写真を参考にZipでダウンロードしてください。

ダウンロード終わりましたら、ArduinoIDEを開いてスケッチ→ライブラリーをインクルード→.zip形式のライブラリーをインストールをクリックし、先ほどダウンロードしたファイルを選んでください。そうすると自動的にライブラリーのインストールが始まります。

問題なくライブラリーのインストールが完了するとライブラリーが追加されました。と表示されます。

ライブラリーがインストールしたところで実際に使ってみようと思います。

ファイル→スケッチの例→AzureIoTHubの中にあるAzure-iothub-mqtt-esp8266が選択できますので選択してください。

qiita Arduino (3).png

サンプルプログラムが表示されますので、それを使ってAzureIoTHubに接続してみようと思います。

それでは、サンプルプログラムの内容の紹介と変更部分を説明していきます。

ESP8266が接続するWiFiアクセスポイントの設定をWiFi.beginにSSID,Passwordをそれぞれ入力してください。 Azure.beginには、先ほどDevice Explorerで取得したキーを張り付けてください。 例:Azure.begin("HostName=YourHost.azure-devices.net;DeviceId=YourDevice;SharedAccessKey="); 注意としては、張り付けたときに両端に"(ダブルクォーテーション)を必ずつけてあることを確認してください。

WiFi.begin("SSID", "PASS");
Azure.begin("Your Key"); //YourKey Example:"HostName=YourHost.azure-devices.net;DeviceId=YourDevice;SharedAccessKey="

Azureからのデータの取得はこの関数で行います。 Azure.setCallback(azureCallback); このazureCallbackは別で関数宣言してください。引数はStringでAzureから届いたデータを渡されますのでそのデータを活用してみてください。 サンプルプログラムでは、シリアルで表示するようになっています。

Azure.setCallback(azureCallback);
void azureCallback(String s) {
Serial.print("azure Message arrived [");
Serial.print(s);
Serial.println("] ");
}

簡単ではありますが、2点を注意して書き換えてください。

続いて、loopの中を簡単に解説していきます。

WiFiに接続できたとき、Azureと通信を開始します。 Azure.connect()にてAzure IoTHubと接続する処理を行ってます。 Azure.push(&a);にてAzure IoTHubにデータ送信処理を行ってます。

void loop() {
if (WiFi.status() == WL_CONNECTED) {
Azure.connect();
DataElement a = DataElement();//Azureに送るデータをJsonで作っていきます。
a.setValue("EspAnalog", analogRead(A0));
Azure.push(&a);
Serial.println("pushed");
delay(2000);
} else {
Serial.println("Not connected to the Internet");
delay(250);
}
}

実際に動かしてみよう

AzureIoTHub→Nefry

これはAzureIoTHub(Device explorer)からNefry(ESP8266が中に入ってる)へデータを送っています。届いたときにLEDが点滅するようになっています。 そこまでラグなく点滅しているのが見えると思います。

こちらはAzureIoTHub(Device explorer)とNefryのコンソール画面になりますが、ほとんどクリックしたタイミングでデータが届いていると思います。

Nefry→AzureIoTHub

こちらはNefry(ESP8266)からAzureIoTHubにデータを送っています。 GROVEのジョイスティックをつかってアナログ値をAzureIoTHubへデータを1秒ごとに送っています。

Device explorerにて届いた値を見ることができます。 今回はESPAnalogという項目にデータが入っているのが見ずらいですがわかると思います。

まとめ

今回このライブラリーを作るまで、お世話になりました@matsujirushi さん、@onoche さんこの場を借りて御礼を申し上げます。

IoTHub×ESP8266の情報があまり多くなく四苦八苦しましたが、このライブラリーを使ってAzureにある機械学習やPower BIなど様々な仕組みと組み合わせて面白いものを作ってもらえたらうれしいです。

ESP8266で静的なIPをわりふってみる

家のネット環境によってはDHCPでIPアドレスを取得するより、静的(static)なIPで割り振りたいという要望を聞きましたのでソースコードを公開します。

#表示内容

ESP8266のlocalIP ゲートウェイのIP サブネットマスク ESP8266のmacAddress

#コード

#include <ESP8266WiFi.h>
#define debug Serial
/*
IPアドレスをDHCPではなく手動で割り振ることをすることができる。
localIP:moduleのIP gateway:デフォルトゲートウエイ subnet:サブネットマスク DNSは指定しなくてよい。
config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = (uint32_t)0x00000000, IPAddress dns2 = (uint32_t)0x00000000)
*/
void setup(){
debug.begin(115200);
WiFi.config(IPAddress(192,168,1,2),IPAddress(192,168,1,1),IPAddress(255,255,255,0));
debug.print("Local IP :");debug.println(address(WiFi.localIP()));
debug.print("Gateway IP:");debug.println(address(WiFi.gatewayIP()));
debug.print("SubnetMask:");debug.println(address(WiFi.subnetMask()));
debug.print("macAddress:");debug.println(WiFi.macAddress());
}
void loop(){
}
String address(IPAddress ip){
String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
return ipStr;
}

ESP8266でWPSを実装してみる

http://bbs.espressif.com/viewtopic.php?t=1096

ソース元はこちら

ESP-WROOM-02にはWPSでWiFiの設定をすることができる環境がつくられているようなのでその解説と結果を報告します。

環境

Arduino IDE 1.6.7 Arduino core for ESP8266 WiFi chip (https://github.com/esp8266/Arduino) v2.2.0

Arduino coreのバージョンが古いと実装されてない可能性があります。

コード

#include <ESP8266WiFi.h>
void Wifi_wait();
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
//WiFi.begin("","")このようにすることでWPSで保存したデータがある場合そちらに接続するようになる
WiFi.begin("", "");
Wifi_wait();
// Wifiに接続していないときにはWPSを開始します
if (WiFi.status() != WL_CONNECTED) {
Serial.println("\nAttempting connection ...");
WiFi.beginWPSConfig();
Wifi_wait();
if (WiFi.status() == WL_CONNECTED) {
Serial.println("Connected!");
Serial.println(WiFi.localIP());
Serial.println(WiFi.SSID());
Serial.println(WiFi.macAddress());
} else {
Serial.println("Connection failed!");
}
} else {
Serial.println("\nConnection already established.");
}
}
void loop() {
}
void Wifi_wait() {
int wait=0;
Serial.println("WiFi connecting");
while (wait < 20) {
if (WiFi.status() == WL_CONNECTED) {
Serial.println("WiFi connected");
return;
}
Serial.print(".");
wait++;
delay(250);
}
Serial.println("Connect timed out");
}

使いかた

Wifiに接続失敗したときにWPSで設定中のルータをさがしに行きます。

WPSで設定中のものがあったとき、ESP-WROOM-02はそのルータから設定を取得し、今後そのルータに接続するようになります。

Wifiに詳しくない人でもESP-WROOM-02を手軽に扱えるようになる技術だと思います、

結果

私の所持しているWifiルータではWPSでの接続は成功しませんでした…

それは、私の持っているWifiルータが悪いのかもしれないのでもしよければ、試して成功したかどうか教えてください。