MQTT_PM25_1
Dependencies: mbed-os-example-wifi-DISCO_IOTBOARD_MQTT MQTT
Diff: main.cpp
- Revision:
- 60:5e586131c009
- Parent:
- 59:9bbcc1b368ba
--- a/main.cpp Tue Apr 23 09:45:23 2019 +0000 +++ b/main.cpp Wed Dec 18 04:09:32 2019 +0000 @@ -1,19 +1,3 @@ -/* WiFi Example - * Copyright (c) 2018 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - //MQTT+WIFI @@ -50,9 +34,9 @@ void messageArrived(MQTT::MessageData& md) { MQTT::Message &message = md.message; - logMessage("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id); - logMessage("Payload %.*s\r\n", message.payloadlen, (char*)message.payload); - ++arrivedcount; + //logMessage("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id); + //logMessage("Payload %.*s\r\n", message.payloadlen, (char*)message.payload); + //++arrivedcount; } @@ -131,6 +115,7 @@ size -= response; // Check if entire message was sent or not printf("sent %d [%.*s]\n", response, strstr(sbuffer, "\r\n")-sbuffer, sbuffer); + } } @@ -147,8 +132,89 @@ socket.close(); } + +Serial particle_sensor(PA_0,PA_1);//TX,RX +Serial pc(USBTX,USBRX); + +float SDS018 () +{ + uint8_t oneByte =0, myData[10],mCheck =0; + uint32_t samples_par = 1000; + int aux=0, t_init =0,i=0; + float PM2_5_A = 0, PM10_A = 0, PM2_5_sum = 0, PM10_sum = 0,PM2_5_avg = 0, PM10_avg = 0,PM2_5,PM10; + Timer t; + + time_t seconds = time(NULL); + //printf("Unix Epoch time = %d\r\n", seconds); + //while(true){ + // t.start(); + // int time_start=t.read_ms(); + //pc.printf("\nPARTICLE\n\r"); + while (aux < samples_par) //while(t.read_ms()-t_init < time_avg) + { + if (aux==0) + t_init = t.read_ms(); + while (particle_sensor.readable()) { // whenever sensor transmits packet (every 1 s) + oneByte = particle_sensor.getc(); + if(oneByte == 0xAA) { + myData[0] = oneByte; + oneByte = particle_sensor.getc(); + if(oneByte == 0xC0) { + myData[1] = oneByte; + mCheck = 0; + for(i=0; i < 6; i++) { // DATA 1-6 received and crc calc + myData[i+2] = particle_sensor.getc(); + //wait_ms(2); + mCheck += myData[i+2]; + if(myData[6]==0x91) + { + //pc.printf("91\n\r"); + } + if(myData[7]==0xA1) + { + //pc.printf("A1\n\r"); + } + } + myData[8] = particle_sensor.getc(); + myData[9] = particle_sensor.getc(); // tail (AB) + if(mCheck == myData[8]) { // if checksum OK + PM2_5 = ((uint16_t)myData[2] | (uint16_t)(myData[3]<<8)); + PM10 = ((uint16_t)myData[4] | (uint16_t)(myData[5]<<8)); + PM2_5_A = (float) PM2_5/10; + PM10_A = (float) PM10/10; + if(PM2_5_A*10 > 9999) + PM2_5_A = 999.9; + if(PM10_A*10 > 9999) + PM10_A = 999.9; + aux++; + PM2_5_sum+=PM2_5_A; // sum samples for future averaging + + PM10_sum+=PM10_A; // sum samples for future averaging + //printf("%3.2f,\t%3.2f\n\r", PM2_5_A, PM10_A); // CSV print: PM2.5, PM10 + //printf("PM2_5_A = %3.2f", PM2_5_A); //PM2.5 + return PM2_5_A; + } + } // head2 + } // head1 + + } // while readable() + + } +} + + + + + + int main() -{ + +{ + + + + pc.baud (115200) ; + int count = 0; printf("WiFi example\n\n"); @@ -182,9 +248,9 @@ // MQTT Example Start float version = 0.6; - char* topic = "test1"; + char* topic = "test"; - logMessage("HelloMQTT: version is %.2f\r\n", version); + //logMessage("HelloMQTT: version is %.2f\r\n", version); NetworkInterface* network = &wifi; if (!network) { @@ -195,10 +261,14 @@ MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork); - const char* hostname = "192.168.0.120"; + const char* hostname = "172.20.10.3"; int port = 1883; logMessage("Connecting to %s:%d\r\n", hostname, port); + + + int rc = mqttNetwork.connect(hostname, port); + if (rc != 0) logMessage("rc from TCP connect is %d\r\n", rc); @@ -213,47 +283,34 @@ if ((rc = client.subscribe(topic, MQTT::QOS2, messageArrived)) != 0) logMessage("rc from MQTT subscribe is %d\r\n", rc); + + + + + + while(1) + { + MQTT::Message message; - // QoS 0 - char buf[100]; - sprintf(buf, "Hello World! QoS 0 message from app version %f\r\n", version); - message.qos = MQTT::QOS0; + + + char buf[100]; + printf("PM2.5 = %3.2f\r\n",SDS018 ()); + sprintf(buf, "PM2.5 = %3.2f\r\n",SDS018 ()); + + + message.qos = MQTT::QOS1; message.retained = false; message.dup = false; message.payload = (void*)buf; message.payloadlen = strlen(buf)+1; rc = client.publish(topic, message); - while (arrivedcount < 1) - client.yield(100); - - // QoS 1 - sprintf(buf, "Hello World! QoS 1 message from app version %f\r\n", version); - message.qos = MQTT::QOS1; - message.payloadlen = strlen(buf)+1; - rc = client.publish(topic, message); - while (arrivedcount < 2) - client.yield(100); - - // QoS 2 - sprintf(buf, "Hello World! QoS 2 message from app version %f\r\n", version); - message.qos = MQTT::QOS2; - message.payloadlen = strlen(buf)+1; - rc = client.publish(topic, message); - while (arrivedcount < 3) - client.yield(100); - - if ((rc = client.unsubscribe(topic)) != 0) - logMessage("rc from unsubscribe was %d\r\n", rc); - - if ((rc = client.disconnect()) != 0) - logMessage("rc from disconnect was %d\r\n", rc); - - mqttNetwork.disconnect(); - - logMessage("Version %.2f: finish %d msgs\r\n", version, arrivedcount); - - return 0; + client.yield(100); + - + } + + + }