Code for sensor nodes connected by radio receiver with gateway
Dependencies: mbed WakeUp coapRadioClient DHT11
Diff: mainHumidity.cpp
- Revision:
- 3:4ffffdb5230f
- Child:
- 7:2393eb882f82
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mainHumidity.cpp Fri Jan 25 02:01:01 2019 +0000 @@ -0,0 +1,122 @@ +#include "sensor.h" +#include "mbed.h" +#include "msg.h" +#include "dbg.h" +#include "coapClient.h" +#include <string> + +// https://os.mbed.com/users/Sissors/code/WakeUp/ +#include "WakeUp.h" + +#include "DHT11.h" +#include "humidityMeter.h" +#include "tempMeter.h" + +#define DATA_BUFFER_LEN 10 +#define BUFFER_LEN 32 +#define CHANNEL 4 +#define RX_ADDRESS 0xABCDEF08 +#define TX_ADDRESS 0xABCDEF11 +#define DATA_RATE 1000 +#define RETRANSMITS 4 + +char postUri[] = "/hum"; +char getConfUri[] = "/conf/hum"; +char postUri2[] = "/temp"; + +Serial pc(USBTX, USBRX); // tx, rx +PinName pinA = PinName(A5); +uint8_t token[] = {1}; +CoapClient coapClient = CoapClient(token, RETRANSMITS, DATA_RATE, CHANNEL, RX_ADDRESS, TX_ADDRESS); +InterruptIn button(USER_BUTTON); + + +// change this +DHT11 dht(pinA); +HumidityMeter sensor = HumidityMeter(&dht); +TempMeter sensor2 = TempMeter(&dht); + +int config_interval = 30; +int sense_interval = 10; + +int config_time_left = 30; +int sense_time_left = 0; + +void check_for_new_config() { + uint8_t buffer[BUFFER_LEN]; + int ret = coapClient.get(buffer, BUFFER_LEN, getConfUri); + if(ret > 0) { + uint8_t sensor_id = 0; + int data = -1; + Msg::deconstruct_data_msg(&sensor_id, &data, buffer, ret); + DBG("INTERVAL: %d", data); + sense_interval = data; + } + DBG("GET: %d", ret); +} + +void collect_and_send_data() { + uint8_t buffer[DATA_BUFFER_LEN]; + int data = sensor.read(); + DBG("DATA: %d", data); + int sensor_id = sensor.getSensorId(); + // TODO put sensor_id in URI, not in payload + Msg::construct_data_msg(sensor_id, data, buffer, DATA_BUFFER_LEN); + int ret = coapClient.post(buffer, DATA_BUFFER_LEN, postUri); + DBG("POST: %d", ret); + + data = sensor2.read(); + DBG("TEMP: %d", data); + sensor_id = sensor2.getSensorId(); + // TODO put sensor_id in URI, not in payload + Msg::construct_data_msg(sensor_id, data, buffer, DATA_BUFFER_LEN); + ret = coapClient.post(buffer, DATA_BUFFER_LEN, postUri2); + DBG("POST: %d", ret); +} + +bool start = false; +void send_packet() { + DBG("Start"); + start = true; +} + + +int main() { + pc.baud(115200); + WakeUp::calibrate(); + sensor.initialize(); + sensor2.initialize(); + DBG("RESTART"); + int czas_na_spanko = 1; + Timer t; + button.rise(&send_packet); + while(true) { + while(start) { + if (config_time_left <= 0) { + check_for_new_config(); + config_time_left = config_interval; + } + if (sense_time_left <= 0) { + collect_and_send_data(); + sense_time_left = sense_interval; + } + + czas_na_spanko = min(config_time_left, sense_time_left); + DBG("SPANKO: %d", czas_na_spanko); + if(czas_na_spanko > 0) { + t.stop(); + //WakeUp::set(czas_na_spanko); + wait(czas_na_spanko); + t.reset(); + t.start(); + config_time_left -= czas_na_spanko; + sense_time_left -= czas_na_spanko; + } else { + config_time_left -= t.read_ms(); + t.stop(); + t.reset(); + t.start(); + } + } + } +} \ No newline at end of file