【 IoTを試そう [ODIN-W2(WiFi) + 温度計 + milkcocoa ] 】 ODIN-W2 にmbed ApplicationShiled をつないで、 https://developer.mbed.org/components/mbed-Application-Shield/ 温度のデータをMilkcocoaにアップするプログラムです。
Dependencies: LM75B Milkcocoa-os
Fork of mbed-os-example-mbed5-wifi by
Diff: main.cpp
- Revision:
- 17:79fa29aa6724
- Parent:
- 10:5b5beb106156
--- a/main.cpp Mon Apr 10 16:30:03 2017 +0100 +++ b/main.cpp Tue Apr 18 07:22:04 2017 +0000 @@ -31,6 +31,26 @@ #endif +#include "Milkcocoa.h" +/************************* Your Milkcocoa Setup *********************************/ +#define MILKCOCOA_APP_ID CONFIG_MILKCOCOA_APP_ID +#define MILKCOCOA_DATASTORE CONFIG_MILKCOCOA_DATASTORE +/************* 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); + +RawSerial pc(USBTX,USBRX); + +#include "LM75B.h" // 温度センサー機能追加 +LM75B sensor(D14,D15); +DigitalOut led1(LED1); + const char *sec2str(nsapi_security_t sec) { switch (sec) { @@ -74,33 +94,10 @@ delete[] ap; } -void http_demo(NetworkInterface *net) -{ - TCPSocket socket; - - printf("Sending HTTP request to www.arm.com...\r\n"); - - // Open a socket on the network interface, and create a TCP connection to www.arm.com - socket.open(net); - socket.connect("www.arm.com", 80); - - // Send a simple http request - char sbuffer[] = "GET / HTTP/1.1\r\nHost: www.arm.com\r\n\r\n"; - int scount = socket.send(sbuffer, sizeof sbuffer); - printf("sent %d [%.*s]\r\n", scount, strstr(sbuffer, "\r\n")-sbuffer, sbuffer); - - // Recieve a simple http response and print out the response line - char rbuffer[64]; - int rcount = socket.recv(rbuffer, sizeof rbuffer); - printf("recv %d [%.*s]\r\n", rcount, strstr(rbuffer, "\r\n")-rbuffer, rbuffer); - - // Close the socket to return its memory and bring down the network interface - socket.close(); -} - int main() { - printf("WiFi example\r\n\r\n"); + pc.baud(MBED_SERIAL_UART_SPEED); + pc.printf("Milkcocoa mbed os ver demo\n\r\n\r\n\r"); scan_demo(&wifi); @@ -117,10 +114,34 @@ printf("Netmask: %s\r\n", wifi.get_netmask()); printf("Gateway: %s\r\n", wifi.get_gateway()); printf("RSSI: %d\r\n\r\n", wifi.get_rssi()); + + Milkcocoa* milkcocoa = new Milkcocoa(&wifi, MQTT_SERVER, MILKCOCOA_SERVERPORT, MILKCOCOA_APP_ID, MQTT_CLIENTID); + + milkcocoa->connect(); + + printf("%d\n\r",milkcocoa->on(MILKCOCOA_DATASTORE, "push", onpush)); + + milkcocoa->setLoopCycle(5000); + milkcocoa->start(); - http_demo(&wifi); + for (int i=0 ; i<1000 ; i++) { + float temperature = sensor.read(); // 温度情報取得 + DataElement elem = DataElement(); + elem.setValue("temp", temperature); + milkcocoa->push(MILKCOCOA_DATASTORE, elem); + Thread::wait(60000); // 60秒に一回1000個アップする。 + } wifi.disconnect(); printf("\r\nDone\r\n"); } + +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("temp")); +} +