Code for sensor nodes connected by radio receiver with gateway
Dependencies: mbed WakeUp coapRadioClient DHT11
mainHumidity.cpp@3:4ffffdb5230f, 2019-01-25 (annotated)
- 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?
User | Revision | Line number | New 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 | } |