ESPr × Milkcocoa for Arduino SDK

이 기사는 Milkcocoa Advent Calendar 2016 17 일째 기사입니다. 테두리가 비어 버렸으므로, 늦어지면서 쓰게 해 받습니다. 🙇

ESPr × Milkcocoa for Arduino SDK



11월에 명성 화악 라는 IT 페스티벌에서 아트를 테마로 한 IoT의 전시를 실시했습니다.


올해의 MashupAwards에도 참가했습니다.
htp://는 ckぉg. jp/rks/49919

전시물에는 ESPr Developer (ESP-WROOM-02 개발 보드) 을 사용하고 있습니다만, ESPr에는 Arduino의 스케치를 직접 기입할 수 있습니다.
즉, Milkcocoa의 ArduinoSDK를 사용한 스케치를 그대로 유용할 수 있습니다.

샘플 코드



동작으로서는
  • ESPr로 WiFi에 연결
  • Milkcocoa에 대한 데이터 push를 onpush()로 모니터링하여 처리합니다.

    라는 간단한 것입니다.setColor 주위는, 작성한 IoT 디바이스의 LED 색을 바꾸는 처리입니다. (이번은 상세 할애합니다.)

    실제로는 ArduinoIDE로 작성한 파일이므로 확장자가 .ino 입니다만, 코드 하이라이트 유효화를 위해 .c 로 기재하고 있습니다.

    sample.c
    #include <Milkcocoa.h>
    #include <ESP8266WiFi.h>
    #include <ESP8266HTTPClient.h>
    #include <Adafruit_NeoPixel.h>
    
    #define MILKCOCOA_APP_ID    "<your-milkcocoa-app-id>"
    #define MILKCOCOA_DATASTORE_NETWORK "network_status"
    #define MILKCOCOA_DATASTORE_COLOR "color"
    #define MILKCOCOA_SERVERPORT    1883
    #define MAX_VAL 64 // 0 to 255 for brightness
    
    const char* ssid = "<your-wifi-ssid>";
    const char* password = "<your-wifi-password>";
    const char MQTT_SERVER[] PROGMEM    = MILKCOCOA_APP_ID ".mlkcca.com";
    const char MQTT_CLIENTID[] PROGMEM  = __TIME__ MILKCOCOA_APP_ID;
    boolean connectedStatus = false;
    int colorCode = 1;
    
    WiFiServer server(80);
    WiFiClient client;
    Milkcocoa milkcocoa = Milkcocoa(&client, MQTT_SERVER, MILKCOCOA_SERVERPORT, MILKCOCOA_APP_ID, MQTT_CLIENTID);
    Adafruit_NeoPixel pixel = Adafruit_NeoPixel(60, 12, NEO_GRB + NEO_KHZ800);
    
    extern "C" {
        #include "user_interface.h"
    }
    
    void onpush(DataElement *elem);
    void setup() {
        Serial.begin(115200);
    
        // Connect to WiFi network
        Serial.println();
        Serial.print("Connecting to ");
        Serial.println(ssid);
    
        WiFi.begin(ssid, password);
        while (WiFi.status() != WL_CONNECTED) {
            delay(500);
            Serial.print(".");
        }
        Serial.println("");
        Serial.println("WiFi connected");
    
        // Start the server
        server.begin();
        Serial.println("Server started");
    
        // Print the IP address
        Serial.println(WiFi.localIP());
    
        pixel.begin();
        pixel.show(); // Initialize all pixels to 'off'
    
        // Milkcocoa
        milkcocoa.on(MILKCOCOA_DATASTORE_COLOR, "push", onpush);
    }
    
    void loop() {
        if (!connectedStatus) {
            milkcocoa.loop();
            DataElement elem = DataElement();
            elem.setValue("status", "connected");
            milkcocoa.push(MILKCOCOA_DATASTORE_NETWORK, &elem);
            connectedStatus = true;
        }
        milkcocoa.loop();
    }
    
    void onpush(DataElement *elem) {
        Serial.println(elem->getInt("colorCode"));
        colorCode = elem->getInt("colorCode");
        setColor(colorCode);
    }
    
    void setColor(uint16_t colorCode) {
        uint16_t i;
        switch (colorCode) {
            case 1:
                // red
                for (i=0; i<pixel.numPixels(); i++) {
                    pixel.setPixelColor(i, pixel.Color(MAX_VAL, 0, 0));
                    pixel.show();
                }
                break;
            case 2:
                // green
                for (i=0; i<pixel.numPixels(); i++) {
                    pixel.setPixelColor(i, pixel.Color(0, MAX_VAL, 0));
                    pixel.show();
                }
                break;
            case 3:
                // blue
                for (i=0; i<pixel.numPixels(); i++) {
                    pixel.setPixelColor(i, pixel.Color(0, 0, MAX_VAL));
                    pixel.show();
                }
                break;
        }
    }
    

    요약



    Arduino 계열의 IoT 보드는 SDK 덕분에 Milkcocoa를 쉽게 사용할 수 있습니다. ESPr은 WiFi만 있으면 그것 단독으로 네트워크에 접속 가능하므로, Milkcocoa와의 궁합은 발군입니다.

    이쪽의 발표 자료에도 개요를 실고 있으므로, 흥미있는 분은 꼭 참조해 주세요.
  • #메이세이 화악 2016에서 #Milkcocoa로 이어지는 LED 디바이스를 전시했습니다.
    htps : // speake r에서 ck. 코 m / 샤노 m / 아 rt-i-t-in-Myojo Wuraku-2016
  • 좋은 웹페이지 즐겨찾기