Skip to content

Commit de9d597

Browse files
author
Brandon Satrom
committed
continue work on Azure IoT Hub integration
1 parent a7b14aa commit de9d597

File tree

3 files changed

+132
-12
lines changed

3 files changed

+132
-12
lines changed

brew-buddy-firmware/src/brew-buddy-firmware.cpp

+26-6
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ void setup()
159159
Particle.function("checkBatt", checkBatterylevel);
160160

161161
// Initialize TFT
162+
/*
162163
tft.begin(TFT_SPEED);
163164
164165
Serial.print("Initializing SD card...");
@@ -176,10 +177,11 @@ void setup()
176177
177178
tft.fillScreen(ILI9341_BLACK);
178179
printSubheadingLine("Waiting for Brew...");
180+
*/
179181

180182
// Check and display the battery level
181183
int battLevel = getBattPercentage();
182-
displayBattLevel(battLevel);
184+
//displayBattLevel(battLevel);
183185

184186
waitUntil(Particle.connected);
185187

@@ -188,13 +190,15 @@ void setup()
188190

189191
//Connect to Azure MQTT Server
190192
client.enableTls(certificates, sizeof(certificates));
191-
client.connect(deviceID, "brew-buddy-hub.azure-devices.net/" + deviceID, "SharedAccessSignature sr=brew-buddy-hub.azure-devices.net&sig=RKWH%2FV8CD595YeAnXOZ8jXsSYMnWf6RiJBnzhUoxCzE%3D&skn=iothubowner&se=1552683541");
193+
client.connect(deviceID, "brew-buddy-hub.azure-devices.net/" + deviceID, "SharedAccessSignature sr=brew-buddy-hub.azure-devices.net&sig=kNKhEIQaObc74GPvEoK4fi3W1ot65f5aQDOFnTdkaqY%3D&skn=iothubowner&se=1553119278");
192194
if (client.isConnected())
193195
{
194196
Particle.publish("mqtt/status", "connected");
195-
client.subscribe("startBrew");
196-
client.subscribe("startFerment");
197-
client.subscribe("stopAll");
197+
bool methodSubResult = client.subscribe("$iothub/methods/#", MQTT::QOS0);
198+
bool msgSubResult = client.subscribe("devices/" + deviceID + "/messages/devicebound/#", MQTT::QOS0);
199+
200+
Particle.publish("matt/method-sub-result", methodSubResult ? "subscribed to hub methods" : "subscription failed");
201+
Particle.publish("matt/method-sub-result", msgSubResult ? "subscribed to hub messages" : "subscription failed");
198202
}
199203
else
200204
{
@@ -305,6 +309,11 @@ void loop()
305309
postFermentationRate();
306310
}
307311
}
312+
313+
if (client.isConnected())
314+
{
315+
client.loop();
316+
}
308317
}
309318

310319
void resetFermentationVariables()
@@ -705,5 +714,16 @@ void updateChart(float temp)
705714

706715
void mqttCB(char *topic, byte *payload, unsigned int length)
707716
{
708-
Particle.publish("mqtt/sub", topic);
717+
char pload[length + 1];
718+
memcpy(pload, payload, length);
719+
pload[length] = NULL;
720+
721+
Serial.printlnf("Topic: %s", topic);
722+
Serial.printlnf("Payload: %s", String(pload));
723+
724+
Particle.publish("mqtt/rec-topic", topic);
725+
Particle.publish("mqtt/rc-payload", String(pload));
726+
727+
// Need to pull msg id out of topic
728+
client.publish("$iothub/methods/res/1/?$rid=" + NULL, "Message Received!");
709729
}

brew-buddy-firmware/src/brew-buddy-firmware.ino

+26-6
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ void setup()
125125
Particle.function("checkBatt", checkBatterylevel);
126126

127127
// Initialize TFT
128+
/*
128129
tft.begin(TFT_SPEED);
129130
130131
Serial.print("Initializing SD card...");
@@ -142,10 +143,11 @@ void setup()
142143
143144
tft.fillScreen(ILI9341_BLACK);
144145
printSubheadingLine("Waiting for Brew...");
146+
*/
145147

146148
// Check and display the battery level
147149
int battLevel = getBattPercentage();
148-
displayBattLevel(battLevel);
150+
//displayBattLevel(battLevel);
149151

150152
waitUntil(Particle.connected);
151153

@@ -154,13 +156,15 @@ void setup()
154156

155157
//Connect to Azure MQTT Server
156158
client.enableTls(certificates, sizeof(certificates));
157-
client.connect(deviceID, "brew-buddy-hub.azure-devices.net/" + deviceID, "SharedAccessSignature sr=brew-buddy-hub.azure-devices.net&sig=RKWH%2FV8CD595YeAnXOZ8jXsSYMnWf6RiJBnzhUoxCzE%3D&skn=iothubowner&se=1552683541");
159+
client.connect(deviceID, "brew-buddy-hub.azure-devices.net/" + deviceID, "SharedAccessSignature sr=brew-buddy-hub.azure-devices.net&sig=kNKhEIQaObc74GPvEoK4fi3W1ot65f5aQDOFnTdkaqY%3D&skn=iothubowner&se=1553119278");
158160
if (client.isConnected())
159161
{
160162
Particle.publish("mqtt/status", "connected");
161-
client.subscribe("startBrew");
162-
client.subscribe("startFerment");
163-
client.subscribe("stopAll");
163+
bool methodSubResult = client.subscribe("$iothub/methods/#", MQTT::QOS0);
164+
bool msgSubResult = client.subscribe("devices/" + deviceID + "/messages/devicebound/#", MQTT::QOS0);
165+
166+
Particle.publish("matt/method-sub-result", methodSubResult ? "subscribed to hub methods" : "subscription failed");
167+
Particle.publish("matt/method-sub-result", msgSubResult ? "subscribed to hub messages" : "subscription failed");
164168
}
165169
else
166170
{
@@ -271,6 +275,11 @@ void loop()
271275
postFermentationRate();
272276
}
273277
}
278+
279+
if (client.isConnected())
280+
{
281+
client.loop();
282+
}
274283
}
275284

276285
void resetFermentationVariables()
@@ -671,5 +680,16 @@ void updateChart(float temp)
671680

672681
void mqttCB(char *topic, byte *payload, unsigned int length)
673682
{
674-
Particle.publish("mqtt/sub", topic);
683+
char pload[length + 1];
684+
memcpy(pload, payload, length);
685+
pload[length] = NULL;
686+
687+
Serial.printlnf("Topic: %s", topic);
688+
Serial.printlnf("Payload: %s", String(pload));
689+
690+
Particle.publish("mqtt/rec-topic", topic);
691+
Particle.publish("mqtt/rc-payload", String(pload));
692+
693+
// Need to pull msg id out of topic
694+
client.publish("$iothub/methods/res/1/?$rid=" + NULL, "Message Received!");
675695
}

brew-buddy-firmware/src/certs/certs.h

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
// Copyright (c) Microsoft. All rights reserved.
2+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
3+
4+
#ifndef CERTS_H
5+
#define CERTS_H
6+
7+
const char certificates[] =
8+
/* DigiCert Baltimore Root */
9+
"-----BEGIN CERTIFICATE-----\r\n"
10+
"MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ\r\n"
11+
"RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD\r\n"
12+
"VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX\r\n"
13+
"DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y\r\n"
14+
"ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy\r\n"
15+
"VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr\r\n"
16+
"mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr\r\n"
17+
"IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK\r\n"
18+
"mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu\r\n"
19+
"XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy\r\n"
20+
"dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye\r\n"
21+
"jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1\r\n"
22+
"BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3\r\n"
23+
"DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92\r\n"
24+
"9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx\r\n"
25+
"jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0\r\n"
26+
"Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz\r\n"
27+
"ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS\r\n"
28+
"R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\r\n"
29+
"-----END CERTIFICATE-----\r\n"
30+
/*DigiCert Global Root CA*/
31+
"-----BEGIN CERTIFICATE-----\r\n"
32+
"MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\r\n"
33+
"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\r\n"
34+
"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\r\n"
35+
"QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\r\n"
36+
"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\r\n"
37+
"b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\r\n"
38+
"9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\r\n"
39+
"CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\r\n"
40+
"nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\r\n"
41+
"43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\r\n"
42+
"T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\r\n"
43+
"gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\r\n"
44+
"BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\r\n"
45+
"TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\r\n"
46+
"DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\r\n"
47+
"hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\r\n"
48+
"06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\r\n"
49+
"PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\r\n"
50+
"YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\r\n"
51+
"CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\r\n"
52+
"-----END CERTIFICATE-----\r\n"
53+
/*D-TRUST Root Class 3 CA 2 2009*/
54+
"-----BEGIN CERTIFICATE-----\r\n"
55+
"MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF\r\n"
56+
"MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD\r\n"
57+
"bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha\r\n"
58+
"ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM\r\n"
59+
"HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB\r\n"
60+
"BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03\r\n"
61+
"UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42\r\n"
62+
"tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R\r\n"
63+
"ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM\r\n"
64+
"lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp\r\n"
65+
"/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G\r\n"
66+
"A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G\r\n"
67+
"A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj\r\n"
68+
"dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy\r\n"
69+
"MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl\r\n"
70+
"cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js\r\n"
71+
"L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL\r\n"
72+
"BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni\r\n"
73+
"acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0\r\n"
74+
"o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K\r\n"
75+
"zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8\r\n"
76+
"PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y\r\n"
77+
"Johw1+qRzT65ysCQblrGXnRl11z+o+I=\r\n"
78+
"-----END CERTIFICATE-----\r\n";
79+
80+
#endif /* CERTS_H */

0 commit comments

Comments
 (0)