Pubnub demo for AT&T IoT Starter Kit. Functionally similar to the Flow demo.

Dependencies:   FXOS8700CQ MODSERIAL mbed

http://pubnub.github.io/slides/workshop/pictures/broadcast.png

Pubnub demo for AT&T IoT Starter Kit

This demo is functionally similar to the Flow demo, so you can find general information here: https://developer.mbed.org/users/JMF/code/Avnet_ATT_Cellular_IOT/.

The only difference is that we use Pubnub to publish the measurements and subscribe to receiving the instructions to set the LED.

Settings

Pubnub related settings are:

Pubnub settings in `config_me.h`

PUBNUB_SUBSCRIBE_KEY
PUBNUB_PUBLISH_KEY
PUBNUB_CHANNEL

All are documented in their respective comments.

Pubnub context class

Similar to Pubnub SDKs, we provide a Pubnub context class. It is defined in pubnub.h header file and implemented in pubnub.cpp.

It provides only the fundamental "publish" and "subscribe" methods. They are documented in the header file.

This class is reusable in other code (it is not specific to this demo), it has a very narrow interface to the AT&T IoT cellular modem code. For example of use, you can look at the main() (in main.c).

Sample of published data

Published message w/measurement data

{"serial":"vstarterkit001","temp":89.61,"humidity":35,"accelX":0.97,"accelY":0.013,"accelZ":-0.038}

Don't worry, nobody got burnt, the temperature is in degrees Fahrenheit. :)

Publish a message (from, say, the Pubnub console http://pubnub.com/console) of the form {"LED":<name-of-the-color>} on the channel that this demo listens to (default is hello_world) to turn the LED to that color on the Starter Kit:

Turn LED to red

{"LED":"Red"}

Turn LED to green

{"LED":"Green"}

Turn LED to blue

{"LED":"Blue"}
Committer:
fkellermavnet
Date:
Thu Aug 11 00:03:09 2016 +0000
Revision:
68:6e311c747045
Parent:
58:c417fbc39c22
Child:
69:5a3414cc7531
Added Avnet copyright headers on all source files.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fkellermavnet 68:6e311c747045 1 /* ===================================================================
fkellermavnet 68:6e311c747045 2 Copyright © 2016, AVNET Inc.
fkellermavnet 68:6e311c747045 3
fkellermavnet 68:6e311c747045 4 Licensed under the Apache License, Version 2.0 (the "License");
fkellermavnet 68:6e311c747045 5 you may not use this file except in compliance with the License.
fkellermavnet 68:6e311c747045 6 You may obtain a copy of the License at
fkellermavnet 68:6e311c747045 7
fkellermavnet 68:6e311c747045 8 http://www.apache.org/licenses/LICENSE-2.0
fkellermavnet 68:6e311c747045 9
fkellermavnet 68:6e311c747045 10 Unless required by applicable law or agreed to in writing,
fkellermavnet 68:6e311c747045 11 software distributed under the License is distributed on an
fkellermavnet 68:6e311c747045 12 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
fkellermavnet 68:6e311c747045 13 either express or implied. See the License for the specific
fkellermavnet 68:6e311c747045 14 language governing permissions and limitations under the License.
fkellermavnet 68:6e311c747045 15
fkellermavnet 68:6e311c747045 16 ======================================================================== */
fkellermavnet 68:6e311c747045 17
JMF 2:0e2ef866af95 18 #ifndef __CONFIG_ME_H_
JMF 2:0e2ef866af95 19 #define __CONFIG_ME_H_
JMF 2:0e2ef866af95 20
JMF 2:0e2ef866af95 21 // User must set these for own context:
fkellermavnet 21:d0038d14ee7c 22
fkellermavnet 50:8ac42961458c 23 #define BUF_SIZE_FOR_N_MAX_SOCKREAD (10)
fkellermavnet 50:8ac42961458c 24 #define MAX_WNC_SOCKREAD_PAYLOAD (1500)
fkellermavnet 50:8ac42961458c 25
fkellermavnet 21:d0038d14ee7c 26 // This is the server's base URL name. Example "www.google.com"
stefanrousseau 24:bd480d2aade4 27 // Note that when you Fork a FLOW, it will typically assign either
stefanrousseau 24:bd480d2aade4 28 // "run-east.att.io" or "run-west.att.io", so be sure to check this.
fkellermavnet 51:d9e5952545da 29 static const char * MY_SERVER_URL = "run-west.att.io";
fkellermavnet 21:d0038d14ee7c 30
stefanrousseau 24:bd480d2aade4 31 // These are FLOW fields from the Endpoints tab:
stefanrousseau 12:7c94ec5069dc 32 #define FLOW_BASE_URL "/1e464b19cdcde/774c88d68202/86694923d5bf28a/in/flow"
stefanrousseau 12:7c94ec5069dc 33 #define FLOW_INPUT_NAME "/climate"
fkellermavnet 21:d0038d14ee7c 34
stefanrousseau 24:bd480d2aade4 35 // Unless you want to use a different protocol, this field should be left as is:
stefanrousseau 12:7c94ec5069dc 36 #define FLOW_URL_TYPE " HTTP/1.1\r\nHost: "
stefanrousseau 12:7c94ec5069dc 37
stefanrousseau 24:bd480d2aade4 38 // This identifier specifies with which FLOW device you are communicating.
stefanrousseau 24:bd480d2aade4 39 // If you only have one devive there then you can just leave this as is.
stefanrousseau 24:bd480d2aade4 40 // Once your FLOW device has been initialized (Virtual Device Initialize clicked),
stefanrousseau 24:bd480d2aade4 41 // the Virtual Device will show up in M2X. This is its "DEVICE SERIAL" field
fkellermavnet 21:d0038d14ee7c 42 #define FLOW_DEVICE_NAME "vstarterkit001"
fkellermavnet 21:d0038d14ee7c 43
stefanrousseau 24:bd480d2aade4 44 // This constant defines how often sensors are read and sent up to FLOW
stefanrousseau 24:bd480d2aade4 45 #define SENSOR_UPDATE_INTERVAL_MS 5000; //5 seconds
stefanrousseau 24:bd480d2aade4 46
stefanrousseau 24:bd480d2aade4 47 // Specify here how many sensor parameters you want reported to FLOW.
stefanrousseau 24:bd480d2aade4 48 // You can use only the temperature and humidity from the shield HTS221
stefanrousseau 24:bd480d2aade4 49 // or you can add the reading of the FXO8700CQ motion sensor on the FRDM-K64F board
stefanrousseau 24:bd480d2aade4 50 // or if you have a SiLabs PMOD plugged into the shield, you can add its proximity sensor,
stefanrousseau 24:bd480d2aade4 51 // UV light, visible ambient light and infrared ambient light readings
stefanrousseau 55:3abf9e3f42e6 52 // If you run the Windows "Sensor Simulator" utility, 8 additional virtual
stefanrousseau 55:3abf9e3f42e6 53 // sensors can also be made available via USB.
stefanrousseau 55:3abf9e3f42e6 54 #define TEMP_HUMIDITY_ONLY 1
stefanrousseau 55:3abf9e3f42e6 55 #define TEMP_HUMIDITY_ACCELEROMETER 2
stefanrousseau 55:3abf9e3f42e6 56 #define TEMP_HUMIDITY_ACCELEROMETER_PMODSENSORS 3
stefanrousseau 55:3abf9e3f42e6 57 #define TEMP_HUMIDITY_ACCELEROMETER_PMODSENSORS_VIRTUALSENSORS 4
stefanrousseau 58:c417fbc39c22 58 static int iSensorsToReport = TEMP_HUMIDITY_ACCELEROMETER; //modify this to change your selection
stefanrousseau 12:7c94ec5069dc 59
fkellermavnet 21:d0038d14ee7c 60 // This is the APN name for the cellular network, you will need to change this, check the instructions included with your SIM card kit:
stefanrousseau 12:7c94ec5069dc 61 static const char * MY_APN_STR = "m2m.com.attz";
fkellermavnet 21:d0038d14ee7c 62
fkellermavnet 21:d0038d14ee7c 63 //This is for normal HTTP. If you want to use TCP to a specific port, change that here:
fkellermavnet 21:d0038d14ee7c 64 static const char * MY_PORT_STR = "80";
JMF 2:0e2ef866af95 65
JMF 2:0e2ef866af95 66 #endif