Blynkを用いたデバイス間通信 – Bridge Widget –
BlynkのBridgeというウィジットを使用してWi-Fiデバイス同士の通信のテストをしてみました!
http://docs.blynk.cc/#widgets-other-bridge
いまいち使い方がよくわからなかったBridgeですが使ってみると非常に有用!今後いろんな場面で使えそうです(特に私のようにスマホ等で通信アプリつくるのに苦労する人は。。。)
目次
構成
A
ヌンチャクコントローラのジョイスティックの値をWi-FiでBlynkサーバに送ります。
Wiiヌンチャクコントローラ
バッテリーモジュール
リチウムイオンポリマー電池400mAh
B
Blynkサーバに送られたジョイスティック情報を受けてLED目ん玉を動かします。
LEDテープNeopixel LED 68個使用
Blynk設定
プロジェクトを2つ作成してAuth Tokenを2個取得します。アプリは直接使用しないので細かい設定は一切必要ありません。とにかくAuth Tokenを2個取得します!
Arduino用のBlynkライブラリは以下にあります。
https://github.com/blynkkk/blynk-library
Arduino IDEプログラム
A側
以下のWiiヌンチャクをマイコンにつなぐライブラリを使用しました。
https://github.com/todbot/wiichuck_adapter
コントローラ接続方法など詳細は以下を御覧ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <Wire.h> #include "nunchuck_funcs.h" //Blynkアプリで取得したAuth Tokenを入力 char auth[] = "A側用のAuth Token"; //WiFiのSSID、パスワード指定 char ssid[] = "WiFiのSSID"; char pass[] = "パスワード"; // Bridge widget on virtual pin 0 WidgetBridge bridge1(V0); byte joyx,joyy; void setup() { // Debug console Serial.begin(115200); nunchuck_init(); Blynk.begin(auth, ssid, pass); } BLYNK_CONNECTED() { bridge1.setAuthToken("B側用のAuth Token"); } void loop() { //ジョイスティックの値取得 nunchuck_get_data(); joyx = nunchuck_joyx(); // range 29 - 226 joyy = nunchuck_joyy(); // range 29 - 226 Serial.print("joyx: "); Serial.print((byte)joyx,DEC); Serial.print("\tjoyy: "); Serial.println((byte)joyy,DEC); //B側のヴァーチャルピンV1にジョイスティック値を送信 bridge1.virtualWrite(V1, joyx, joyy); Blynk.run(); } |
B側
LED用のライブラリは以下を使用しました。
https://github.com/adafruit/Adafruit_NeoPixel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
#define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <Adafruit_NeoPixel.h> #define PIN D4 Adafruit_NeoPixel led = Adafruit_NeoPixel(68, PIN, NEO_GRB + NEO_KHZ800); int blackNum = 24; int pupilNum = 12; uint32_t color; int brightness = 40; byte eyeColor; int LR =0; //Black eye L&R animation int blackLED[15][24] = {{12,32,35,55,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}, {12,13,31,36,54,55,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}, {11,13,14,30,37,53,54,56,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}, {10,11,14,15,29,38,52,53,56,57,68,68,68,68,68,68,68,68,68,68,68,68,68,68}, { 9,10,11,12,15,16,28,33,34,39,51,52,55,56,57,58,68,68,68,68,68,68,68,68}, { 0, 8, 9,10,11,12,13,16,17,27,32,35,40,50,51,54,55,56,57,58,59,67,68,68}, { 0, 1, 7, 8, 9,10,13,14,17,18,26,31,36,41,49,50,53,54,57,58,59,60,66,67}, { 1, 2, 6, 7, 8, 9,14,15,18,19,25,30,37,42,48,49,52,53,58,59,60,61,65,66}, { 2, 3, 5, 6, 7, 8,15,16,19,20,24,29,38,43,47,48,51,52,59,60,61,62,64,65}, { 3, 4, 5, 6, 7,16,17,20,21,23,28,39,44,46,47,50,51,60,61,62,63,64,68,68}, { 4, 5, 6,17,18,21,22,27,40,45,46,49,50,61,62,63,68,68,68,68,68,68,68,68}, { 4, 5,18,19,26,41,48,49,62,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}, { 4,19,20,25,42,47,48,63,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}, {20,21,24,43,46,47,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}, {21,23,44,46,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}}; //pupil L&R animation int pupilLED[15][12] = {{33,34,68,68,68,68,68,68,68,68,68,68}, {32,33,34,35,68,68,68,68,68,68,68,68}, {12,31,32,33,34,35,36,55,68,68,68,68}, {12,13,30,31,32,33,34,35,36,37,54,55}, {13,14,29,30,31,32,35,36,37,38,53,54}, {14,15,28,29,30,31,36,37,38,39,52,53}, {15,16,27,28,29,30,37,38,39,40,51,52}, {16,17,26,27,28,29,38,39,40,41,50,51}, {17,18,25,26,27,28,39,40,41,42,49,50}, {18,19,24,25,26,27,40,41,42,43,48,49}, {19,20,23,24,25,26,41,42,43,44,47,48}, {20,21,22,23,24,25,42,43,44,45,46,47}, {21,22,23,24,43,44,45,46,68,68,68,68}, {22,23,44,45,68,68,68,68,68,68,68,68}, {22,45,68,68,68,68,68,68,68,68,68,68}}; //Blink animation int eyelid = 0; int eyelidNum[8] = {0,4,8,16,24,34,44,56}; int eyelidLED[56] = {64,65,66,67,58,59,60,61,56,57,62,63,49,50,51,52,47,48,53,54,38,39,40,41,46,55,36,37,42,43,26,27,28,29,35,44,24,25,30,31,15,16,17,18,34,45,23,32,13,14,19,20,6,7,8,9}; int x, y; //Blynkアプリで取得したAuth Tokenを入力 char auth[] = "B側用のAuth Token"; //WiFiのSSID、パスワード指定 char ssid[] = "WiFiのSSID"; char pass[] = "パスワード"; void setup() { // Debug console Serial.begin(115200); Blynk.begin(auth, ssid, pass); led.begin(); led.setBrightness(brightness); // Initial Brightness 40 led.show(); // Initialize all pixels to 'off' color = led.Color(0, 177, 55); //瞳の色 } uint32_t Wheel(byte WheelPos) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return led.Color(255 - WheelPos * 3, 0, WheelPos * 3); } if(WheelPos < 170) { WheelPos -= 85; return led.Color(0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; return led.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } void blink(int eyelid, int LR) { if (eyelid != 8){ //白目 for(uint16_t i=0; i<led.numPixels(); i++) { led.setPixelColor(i, led.Color(66, 66, 66)); } //黒目 for(uint16_t i=0; i<blackNum; i++) { led.setPixelColor(blackLED[LR][i], color); } //瞳孔 for(uint16_t i=0; i<pupilNum; i++) { led.setPixelColor(pupilLED[LR][i], led.Color(0, 0, 66)); } //まぶた for(int i=0; i < eyelidNum[eyelid]; i++) { led.setPixelColor(eyelidLED[i], 0); } } else if (eyelid == 8){ led.clear(); } led.show(); } //ヴァーチャルピンV1に送られた値を取得し目ン玉をうごかす BLYNK_WRITE(V1){ x = param[0].asInt(); y = param[1].asInt(); Serial.print("joyx: "); Serial.print(x); Serial.print(" joyy: "); Serial.println(y); //ジョイスティックy軸でまばたき eyelid = map(y, 29, 130, 8, 0); if (eyelid > 8) { eyelid = 8; } if (eyelid < 0) { eyelid = 0; } //ジョイスティックx軸で瞳左右 LR = map(x, 29, 226, 0, 14); if (LR > 14) { LR = 14; } if (LR < 0) { LR = 0; } blink(eyelid, LR); } void loop() { Blynk.run(); } |
動作
Blynkの利用でデバイス間の通信も簡単にできましたー!しかもサーバーへの通信設定などは全く意識してないのでラクラク♪
いろいろ可能性が広がりそうな機能ですね!
はじめまして
バッテリーモジュールが現在売られていないのですが、バッテリーを他の方法でつなげるやり方はご存知でしょうか?
コメントありがとうございます。
ここで使用したLiPoバッテリーのコネクタはJST-PH2.0ですので
JST-PH2.0のオスコネクタを使用すればよいかと思います。
メスコネクタもセットでついてきてしまいますが
https://amzn.to/2Chf07x
こちらなどいかがでしょうか
ありがとうございます。
こちらの商品で試してみます!!
因みに400mAhの場合実際に使用できる時間はどれくらいでしょうか?
申し訳ございません。LiPoでの長時間動作確認は実施したことがなく、
WiFi通信回数や電気負荷に大きく依存するかと思いますので明確な回答はできかねます。
ご了承ください。
すいません
そうですよね。
私の方で確認してみます。
素早い返信ありがとうございます。