BlynkでLED目ん玉をコントロール!
いつのまにかBlynkがBLE対応してたので前回ダイソー版プラレールをBlynkでコントロールしてみたのですが、今回はBLE搭載マイコンAdafruit Feather 32u4 Bluefruit LEを使用してLED目ん玉をBlynkで制御してみます。
-
-
- Blynk制御BLEトレインについてはこちら
https://homemadegarbage.com/blynk-ble-train01 - LED目ん玉についてはこちら
https://homemadegarbage.com/neopixel-led-eyeball
hackstar.io記事 - Adafruit Feather 32u4 Bluefruit LEに関する記事はこちら
https://homemadegarbage.com/bluefruit01
- Blynk制御BLEトレインについてはこちら
-
目次
ブロック図
LEDテープNeopixelとBLE搭載マイコンAdafruit Feather 32u4 Bluefruit LEを使用して、スマホアプリBlynkでコントロール
Blynkライブラリ
最新ライブラリは以下にあります。
https://github.com/blynkkk/blynk-library
今回はAdafruit Feather 32u4 Bluefruit LEを使うので
[スケッチの例] -> [Blynk] -> [Boards_BLE]-> [
Adafruit_Feather_32u4_BLE]を参考にコード生成しました。
Blynk設定
新規プロジェクトを作成します。ハードウェアではAdafruit製品がまだないのでとりあえずArduino UNOを選択。
AUTH TOKENはArduinoコード生成時に使用しますので控えときます(もしくはメール送信します)。
ウィジェットとしてBLEとジョイスティックを配置します。
ジョイスティックの設定はこんな感じでヴァーチャルピンV1に2軸の数値を出力します。
Arduino IDE
[スケッチの例] -> [Blynk] -> [Boards_BLE]-> [Adafruit_Feather_32u4_BLE]を参考にコード生成しました。
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 |
#define BLYNK_PRINT Serial #define BLYNK_USE_DIRECT_CONNECT #include <BlynkSimpleSerialBLE.h> #include <SPI.h> #include <Adafruit_BLE.h> #include <Adafruit_BluefruitLE_SPI.h> #include <Adafruit_NeoPixel.h> // You should get Auth Token in the Blynk App. // Go to the Project Settings (nut icon). char auth[] = "BlynkアプリのYourAuthTokenを入力"; // SHARED SPI SETTINGS (see adafruit webpages for details) #define BLUEFRUIT_SPI_CS 8 #define BLUEFRUIT_SPI_IRQ 7 #define BLUEFRUIT_SPI_RST 4 // Optional but recommended, set to -1 if unused #define BLUEFRUIT_VERBOSE_MODE true // Create ble instance, see pinouts above Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST); #define PIN 6 Adafruit_NeoPixel led = Adafruit_NeoPixel(68, PIN, NEO_GRB + NEO_KHZ800); int blackNum = 24; int pupilNum = 12; uint32_t color; int brightness = 40; 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}; //Joystick Value BLYNK_WRITE(V1) { int x = param[0].asInt(); int y = param[1].asInt(); Serial.print("x: "); Serial.print(x); Serial.print(" y: "); Serial.print(y); eyelid = map(y, 0, 128, 8, 0); if (eyelid > 8) { eyelid = 8; } if (eyelid < 0) { eyelid = 0; } Serial.print(" eyelid: "); Serial.print(eyelid); LR = map(x, 0, 255, 0, 14); if (LR > 14) { LR = 14; } if (LR < 0) { LR = 0; } Serial.print(" eyeLR: "); Serial.println(LR); if (eyelid != 8){ //Pewter for(uint16_t i=0; i<led.numPixels(); i++) { led.setPixelColor(i, led.Color(66, 66, 66)); } //Black eye for(uint16_t i=0; i<blackNum; i++) { led.setPixelColor(blackLED[LR][i], color); } //pupil for(uint16_t i=0; i<pupilNum; i++) { led.setPixelColor(pupilLED[LR][i], led.Color(0, 0, 66)); } //eyelid for(int i=0; i < eyelidNum[eyelid]; i++) { led.setPixelColor(eyelidLED[i], 0); } } else if (eyelid == 8){ led.clear(); } led.show(); } void setup() { Serial.begin(9600); Blynk.begin(auth, ble); ble.begin(BLUEFRUIT_VERBOSE_MODE); ble.factoryReset(); // Optional ble.setMode(BLUEFRUIT_MODE_DATA); led.begin(); led.setBrightness(brightness); // Initial Brightness 40 led.show(); // Initialize all pixels to 'off' color = led.Color(0, 177, 55); //pupil color } void loop() { Blynk.run(); } |
Blynk BLE接続
BlynkプロジェクトのBLEウェジットをクリックして設定します。
“Connect BLE device”をクリックして “Adafruit Bluefruit LE”が表示されたらOKをクリックして接続する。
動作
これまた簡単にできた!