mbed OS5 지원 버전 milkcocoa 라이브러리

10282 단어 mbedmbed-osmilkcocoa
이전의 기사 에서 소개한 mbed OS5 대응판의 milkcocoa 라이브러리가 완성되었으므로 소개합니다.
(milkcocoa는 이전 기사을 참조하십시오.)
 
  

mbed OS5 대응이란?



mbed OS5에 대응하는 것은 mbed OS5의 API나 서비스에 대응했다는 것입니다.
이번 milkcocoa 라이브러리는 mbed OS5 Network APIRTOS을 지원했습니다.

Network API



API에 대응시키는 것으로, I/F의 전환을 편하게 할 수 있습니다. 인터넷 서비스인 milkcocoa에 연결하기 위한 Ethernet이나 Wi-Fi등의 I/F의 API는 공식으로 정의되고 있으므로, 향후는 이 정의에 따른 API를 가진 라이브러리가 늘어나갈 것이라고 생각 합니다. 현재는 이더넷(LAN)을 가진 mbed OS5 대응 보드용의 라이브러리와 ESP8266의 라이브러리가 대응하고 있습니다.

RTOS



milkcocoa와의 통신을 은폐하기 위해서 통신 부분을 thread화하고 있습니다. 통신은 뒤에서 움직이기 때문에 어플리케이션으로부터는 함수를 정기적으로 호출할 필요없고, 송신할 때도 통신 대기로 블록되지 않게 하고 있습니다.

라이브러리 및 샘플



mbed OS5 대응판 milkcocoa 라이브러리는 이하의 URL로 공개하고 있습니다.

htps : //로 ゔぇぺぺr. m베 d. 오 rg / 우세 rs / jk 소 ft / 코데 / 미 lk 여기 아오 s /

샘플 프로그램은 다음과 같습니다.

이더넷 버전
htps : //에서 ゔぇぺぺr. m베 d. 오 rg/우세 rs/jk 소 ft/코데/미 lk 여기 아오사 mpぇ_에 th/

Wi-Fi(ESP8266) 버전
htps : //로 ゔぇぺぺr. m베 d. 오 rg/우세 rs/jk 소 ft/코데/미 lk 여기 아오사 mpぇ_에 SP8266/

라이브러리 사용법



샘플 프로그램은 다음과 같습니다.
이더넷 버전의 샘플이지만 코멘트를 추가하고 있으므로 참고하십시오.

main.cpp
#include "mbed.h"
#include "MQTTInterface.h"
#include "MQTTClient.h"
#include "Milkcocoa.h"
#include "MClient.h"
#include "EthernetInterface.h"

EthernetInterface eth;
RawSerial pc(USBTX,USBRX);

/************************* Your Milkcocoa Setup *********************************/

#define MILKCOCOA_APP_ID      "...YOUR_MILKCOCOA_APP_ID..."
#define MILKCOCOA_DATASTORE   "mbed_lan"

/************* Milkcocoa Setup (you don't need to change this!) ******************/

#define MILKCOCOA_SERVERPORT  1883

/************ Global State (you don't need to change this!) ******************/
const char MQTT_SERVER[]  = MILKCOCOA_APP_ID ".mlkcca.com";
const char MQTT_CLIENTID[] = __TIME__ MILKCOCOA_APP_ID;

extern void onpush(MQTT::MessageData& md);

int main() {

    pc.baud(9600);
    pc.printf("Milkcocoa mbed os ver demo\n\r\n\r\n\r");

    // Ethernet I/Fの準備
    int ret = eth.connect();
    if (ret != 0) {
        printf("\r\nConnection error\r\n");
        return -1;
    }
    pc.printf("\n\rEthernet connected\n\r");

    // 第1引数がインターフェースです。mbed OS5のAPIに対応したクラスを指定します。
    // EthernetでもWi-Fiでもここで指定すれば違いなく使えます。
    Milkcocoa* milkcocoa = new Milkcocoa(&eth, MQTT_SERVER, MILKCOCOA_SERVERPORT, MILKCOCOA_APP_ID, MQTT_CLIENTID);

    //Milkcocoaのサーバに接続します。 
    milkcocoa->connect();

    // Subscribeの設定をする。
    pc.printf("%d\n\r",milkcocoa->on(MILKCOCOA_DATASTORE, "push", onpush));

    // Milkcocoaのサーバに繋げる周期を設定する
    milkcocoa->setLoopCycle(5000);

    // Milkcocoのサーバとの通信を開始する。
    milkcocoa->start();

    while(1) {
        DataElement elem = DataElement();
        elem.setValue("v", 1);

        // データをプッシュする
        // (実際はキューに入れるだけで実際にサーバに送信するのは、通信のタイミング)
        milkcocoa->push(MILKCOCOA_DATASTORE, elem);

        Thread::wait(7000);
    }
}

// データを受け取った際にコールされる関数
void onpush(MQTT::MessageData& md)
{
    MQTT::Message &message = md.message;
    DataElement de = DataElement((char*)message.payload);
    pc.printf("onpush\n\r");
    pc.printf("%d\n\r",de.getInt("v"));
}

마지막으로



mbed OS5도 Milkcocoa도 사양이 바뀌면 순차 대응해 가고 싶습니다.
만약 버그 픽스나 개수가 있으면 풀릭해 주세요.

좋은 웹페이지 즐겨찾기