Code for sensor nodes connected by radio receiver with gateway

Dependencies:   mbed WakeUp coapRadioClient DHT11

Committer:
Ka_myk
Date:
Fri Jan 25 02:01:01 2019 +0000
Revision:
3:4ffffdb5230f
Child:
7:2393eb882f82
main humidity

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ka_myk 3:4ffffdb5230f 1 #include "sensor.h"
Ka_myk 3:4ffffdb5230f 2 #include "mbed.h"
Ka_myk 3:4ffffdb5230f 3 #include "msg.h"
Ka_myk 3:4ffffdb5230f 4 #include "dbg.h"
Ka_myk 3:4ffffdb5230f 5 #include "coapClient.h"
Ka_myk 3:4ffffdb5230f 6 #include <string>
Ka_myk 3:4ffffdb5230f 7
Ka_myk 3:4ffffdb5230f 8 // https://os.mbed.com/users/Sissors/code/WakeUp/
Ka_myk 3:4ffffdb5230f 9 #include "WakeUp.h"
Ka_myk 3:4ffffdb5230f 10
Ka_myk 3:4ffffdb5230f 11 #include "DHT11.h"
Ka_myk 3:4ffffdb5230f 12 #include "humidityMeter.h"
Ka_myk 3:4ffffdb5230f 13 #include "tempMeter.h"
Ka_myk 3:4ffffdb5230f 14
Ka_myk 3:4ffffdb5230f 15 #define DATA_BUFFER_LEN 10
Ka_myk 3:4ffffdb5230f 16 #define BUFFER_LEN 32
Ka_myk 3:4ffffdb5230f 17 #define CHANNEL 4
Ka_myk 3:4ffffdb5230f 18 #define RX_ADDRESS 0xABCDEF08
Ka_myk 3:4ffffdb5230f 19 #define TX_ADDRESS 0xABCDEF11
Ka_myk 3:4ffffdb5230f 20 #define DATA_RATE 1000
Ka_myk 3:4ffffdb5230f 21 #define RETRANSMITS 4
Ka_myk 3:4ffffdb5230f 22
Ka_myk 3:4ffffdb5230f 23 char postUri[] = "/hum";
Ka_myk 3:4ffffdb5230f 24 char getConfUri[] = "/conf/hum";
Ka_myk 3:4ffffdb5230f 25 char postUri2[] = "/temp";
Ka_myk 3:4ffffdb5230f 26
Ka_myk 3:4ffffdb5230f 27 Serial pc(USBTX, USBRX); // tx, rx
Ka_myk 3:4ffffdb5230f 28 PinName pinA = PinName(A5);
Ka_myk 3:4ffffdb5230f 29 uint8_t token[] = {1};
Ka_myk 3:4ffffdb5230f 30 CoapClient coapClient = CoapClient(token, RETRANSMITS, DATA_RATE, CHANNEL, RX_ADDRESS, TX_ADDRESS);
Ka_myk 3:4ffffdb5230f 31 InterruptIn button(USER_BUTTON);
Ka_myk 3:4ffffdb5230f 32
Ka_myk 3:4ffffdb5230f 33
Ka_myk 3:4ffffdb5230f 34 // change this
Ka_myk 3:4ffffdb5230f 35 DHT11 dht(pinA);
Ka_myk 3:4ffffdb5230f 36 HumidityMeter sensor = HumidityMeter(&dht);
Ka_myk 3:4ffffdb5230f 37 TempMeter sensor2 = TempMeter(&dht);
Ka_myk 3:4ffffdb5230f 38
Ka_myk 3:4ffffdb5230f 39 int config_interval = 30;
Ka_myk 3:4ffffdb5230f 40 int sense_interval = 10;
Ka_myk 3:4ffffdb5230f 41
Ka_myk 3:4ffffdb5230f 42 int config_time_left = 30;
Ka_myk 3:4ffffdb5230f 43 int sense_time_left = 0;
Ka_myk 3:4ffffdb5230f 44
Ka_myk 3:4ffffdb5230f 45 void check_for_new_config() {
Ka_myk 3:4ffffdb5230f 46 uint8_t buffer[BUFFER_LEN];
Ka_myk 3:4ffffdb5230f 47 int ret = coapClient.get(buffer, BUFFER_LEN, getConfUri);
Ka_myk 3:4ffffdb5230f 48 if(ret > 0) {
Ka_myk 3:4ffffdb5230f 49 uint8_t sensor_id = 0;
Ka_myk 3:4ffffdb5230f 50 int data = -1;
Ka_myk 3:4ffffdb5230f 51 Msg::deconstruct_data_msg(&sensor_id, &data, buffer, ret);
Ka_myk 3:4ffffdb5230f 52 DBG("INTERVAL: %d", data);
Ka_myk 3:4ffffdb5230f 53 sense_interval = data;
Ka_myk 3:4ffffdb5230f 54 }
Ka_myk 3:4ffffdb5230f 55 DBG("GET: %d", ret);
Ka_myk 3:4ffffdb5230f 56 }
Ka_myk 3:4ffffdb5230f 57
Ka_myk 3:4ffffdb5230f 58 void collect_and_send_data() {
Ka_myk 3:4ffffdb5230f 59 uint8_t buffer[DATA_BUFFER_LEN];
Ka_myk 3:4ffffdb5230f 60 int data = sensor.read();
Ka_myk 3:4ffffdb5230f 61 DBG("DATA: %d", data);
Ka_myk 3:4ffffdb5230f 62 int sensor_id = sensor.getSensorId();
Ka_myk 3:4ffffdb5230f 63 // TODO put sensor_id in URI, not in payload
Ka_myk 3:4ffffdb5230f 64 Msg::construct_data_msg(sensor_id, data, buffer, DATA_BUFFER_LEN);
Ka_myk 3:4ffffdb5230f 65 int ret = coapClient.post(buffer, DATA_BUFFER_LEN, postUri);
Ka_myk 3:4ffffdb5230f 66 DBG("POST: %d", ret);
Ka_myk 3:4ffffdb5230f 67
Ka_myk 3:4ffffdb5230f 68 data = sensor2.read();
Ka_myk 3:4ffffdb5230f 69 DBG("TEMP: %d", data);
Ka_myk 3:4ffffdb5230f 70 sensor_id = sensor2.getSensorId();
Ka_myk 3:4ffffdb5230f 71 // TODO put sensor_id in URI, not in payload
Ka_myk 3:4ffffdb5230f 72 Msg::construct_data_msg(sensor_id, data, buffer, DATA_BUFFER_LEN);
Ka_myk 3:4ffffdb5230f 73 ret = coapClient.post(buffer, DATA_BUFFER_LEN, postUri2);
Ka_myk 3:4ffffdb5230f 74 DBG("POST: %d", ret);
Ka_myk 3:4ffffdb5230f 75 }
Ka_myk 3:4ffffdb5230f 76
Ka_myk 3:4ffffdb5230f 77 bool start = false;
Ka_myk 3:4ffffdb5230f 78 void send_packet() {
Ka_myk 3:4ffffdb5230f 79 DBG("Start");
Ka_myk 3:4ffffdb5230f 80 start = true;
Ka_myk 3:4ffffdb5230f 81 }
Ka_myk 3:4ffffdb5230f 82
Ka_myk 3:4ffffdb5230f 83
Ka_myk 3:4ffffdb5230f 84 int main() {
Ka_myk 3:4ffffdb5230f 85 pc.baud(115200);
Ka_myk 3:4ffffdb5230f 86 WakeUp::calibrate();
Ka_myk 3:4ffffdb5230f 87 sensor.initialize();
Ka_myk 3:4ffffdb5230f 88 sensor2.initialize();
Ka_myk 3:4ffffdb5230f 89 DBG("RESTART");
Ka_myk 3:4ffffdb5230f 90 int czas_na_spanko = 1;
Ka_myk 3:4ffffdb5230f 91 Timer t;
Ka_myk 3:4ffffdb5230f 92 button.rise(&send_packet);
Ka_myk 3:4ffffdb5230f 93 while(true) {
Ka_myk 3:4ffffdb5230f 94 while(start) {
Ka_myk 3:4ffffdb5230f 95 if (config_time_left <= 0) {
Ka_myk 3:4ffffdb5230f 96 check_for_new_config();
Ka_myk 3:4ffffdb5230f 97 config_time_left = config_interval;
Ka_myk 3:4ffffdb5230f 98 }
Ka_myk 3:4ffffdb5230f 99 if (sense_time_left <= 0) {
Ka_myk 3:4ffffdb5230f 100 collect_and_send_data();
Ka_myk 3:4ffffdb5230f 101 sense_time_left = sense_interval;
Ka_myk 3:4ffffdb5230f 102 }
Ka_myk 3:4ffffdb5230f 103
Ka_myk 3:4ffffdb5230f 104 czas_na_spanko = min(config_time_left, sense_time_left);
Ka_myk 3:4ffffdb5230f 105 DBG("SPANKO: %d", czas_na_spanko);
Ka_myk 3:4ffffdb5230f 106 if(czas_na_spanko > 0) {
Ka_myk 3:4ffffdb5230f 107 t.stop();
Ka_myk 3:4ffffdb5230f 108 //WakeUp::set(czas_na_spanko);
Ka_myk 3:4ffffdb5230f 109 wait(czas_na_spanko);
Ka_myk 3:4ffffdb5230f 110 t.reset();
Ka_myk 3:4ffffdb5230f 111 t.start();
Ka_myk 3:4ffffdb5230f 112 config_time_left -= czas_na_spanko;
Ka_myk 3:4ffffdb5230f 113 sense_time_left -= czas_na_spanko;
Ka_myk 3:4ffffdb5230f 114 } else {
Ka_myk 3:4ffffdb5230f 115 config_time_left -= t.read_ms();
Ka_myk 3:4ffffdb5230f 116 t.stop();
Ka_myk 3:4ffffdb5230f 117 t.reset();
Ka_myk 3:4ffffdb5230f 118 t.start();
Ka_myk 3:4ffffdb5230f 119 }
Ka_myk 3:4ffffdb5230f 120 }
Ka_myk 3:4ffffdb5230f 121 }
Ka_myk 3:4ffffdb5230f 122 }