get humidity data and send to LoRa gateway

Dependencies:   mbed X_NUCLEO_IKS01A2

Committer:
rschiano75
Date:
Wed Apr 22 16:20:58 2020 +0000
Revision:
5:90900ae27136
Parent:
4:4a012fc4ecc4
Invio umidita' con LoRaWAN

Who changed what in which revision?

UserRevisionLine numberNew contents of line
reversi 0:5b9fdd76a7d6 1 #include "mbed.h"
reversi 0:5b9fdd76a7d6 2 #include "XNucleoIKS01A2.h"
reversi 1:73299b677405 3 #include <string>
reversi 1:73299b677405 4 #include <sstream>
reversi 0:5b9fdd76a7d6 5
reversi 1:73299b677405 6 #define CR 0x0D
reversi 1:73299b677405 7
reversi 1:73299b677405 8 using namespace std;
reversi 1:73299b677405 9
reversi 1:73299b677405 10 void modem_at_cmd(string);
reversi 1:73299b677405 11 void wait4join(void);
reversi 1:73299b677405 12
reversi 1:73299b677405 13 Serial pc(D1, D0, 115200);
reversi 1:73299b677405 14 Serial lora(PB_6, PA_10, 115200);
reversi 1:73299b677405 15
reversi 1:73299b677405 16 static XNucleoIKS01A2* board = XNucleoIKS01A2::instance(D14, D15, D4, D5);
reversi 1:73299b677405 17 static HTS221Sensor *ht_sensor = board->ht_sensor;
rschiano75 5:90900ae27136 18 char* msgSend[64];
reversi 0:5b9fdd76a7d6 19
reversi 1:73299b677405 20 void join_lora_gateway(string eui = "0000000000000001", string ak = "00000000000000000000000000000001", string join_method = "1") {
reversi 1:73299b677405 21 pc.printf("Test seriale no pc\r\n");
reversi 1:73299b677405 22 modem_at_cmd("AT");
reversi 1:73299b677405 23 pc.printf("Inviato AT\r\n");
reversi 1:73299b677405 24 wait(1);
reversi 1:73299b677405 25 modem_at_cmd("AT+APPEUI="+eui);
reversi 1:73299b677405 26 pc.printf("Inviato EUI\r\n");
reversi 1:73299b677405 27 wait(1);
reversi 1:73299b677405 28 modem_at_cmd("AT+AK="+ak);
reversi 1:73299b677405 29 pc.printf("Inviato AK\r\n");
reversi 1:73299b677405 30 wait(1);
reversi 1:73299b677405 31 modem_at_cmd("AT+JOIN="+join_method);
reversi 1:73299b677405 32 pc.printf("Inviato JOIN\r\n");
reversi 1:73299b677405 33 wait4join();
reversi 1:73299b677405 34 modem_at_cmd("AT+DC=0");
reversi 1:73299b677405 35 pc.printf("Disabled DC\r\n");
reversi 1:73299b677405 36 wait(1);
reversi 1:73299b677405 37 modem_at_cmd("AT+ADR=1");
reversi 1:73299b677405 38 pc.printf("Enabled ADR\r\n");
reversi 1:73299b677405 39 wait(1);
reversi 1:73299b677405 40 }
reversi 1:73299b677405 41
reversi 2:0b1cbb0060bc 42 string string_to_hex(string input)
reversi 2:0b1cbb0060bc 43 {
reversi 2:0b1cbb0060bc 44 static const char hex_digits[] = "0123456789ABCDEF";
reversi 2:0b1cbb0060bc 45
reversi 2:0b1cbb0060bc 46 std::string output;
reversi 2:0b1cbb0060bc 47 output.reserve(input.length() * 2);
reversi 2:0b1cbb0060bc 48 for (int i = 0; i < input.length(); i++)
reversi 2:0b1cbb0060bc 49 {
reversi 2:0b1cbb0060bc 50 output[2*i] = hex_digits[input[i] >> 4];
reversi 2:0b1cbb0060bc 51 output[2*i+1] = (hex_digits[input[i] & 15]);
reversi 2:0b1cbb0060bc 52 }
reversi 2:0b1cbb0060bc 53 return output;
reversi 2:0b1cbb0060bc 54 }
reversi 1:73299b677405 55
reversi 1:73299b677405 56 int init() {
reversi 0:5b9fdd76a7d6 57 pc.printf("Initialization..\r\n");
reversi 0:5b9fdd76a7d6 58
reversi 0:5b9fdd76a7d6 59 uint8_t id;
reversi 0:5b9fdd76a7d6 60 int error_code = ht_sensor->read_id(&id);
reversi 0:5b9fdd76a7d6 61 if (error_code != 0) {
reversi 0:5b9fdd76a7d6 62 pc.printf("Error %d reading sensor ID\r\n", error_code);
reversi 0:5b9fdd76a7d6 63 return 1;
reversi 0:5b9fdd76a7d6 64 }
reversi 0:5b9fdd76a7d6 65 pc.printf("Connected to sensor with ID 0x%x\r\n", id);
reversi 0:5b9fdd76a7d6 66
reversi 0:5b9fdd76a7d6 67 if (ht_sensor->enable() != 0) {
reversi 0:5b9fdd76a7d6 68 pc.printf("Error enabling the ht sensor\r\n");
reversi 0:5b9fdd76a7d6 69 return 2;
reversi 0:5b9fdd76a7d6 70 }
reversi 0:5b9fdd76a7d6 71
reversi 0:5b9fdd76a7d6 72 if (ht_sensor->set_odr(1.0f) != 0) {
reversi 0:5b9fdd76a7d6 73 pc.printf("Error setting ODR\r\n");
reversi 0:5b9fdd76a7d6 74 return 3;
reversi 0:5b9fdd76a7d6 75 }
reversi 0:5b9fdd76a7d6 76
reversi 1:73299b677405 77 join_lora_gateway();
reversi 1:73299b677405 78
reversi 1:73299b677405 79 return 0;
reversi 1:73299b677405 80 }
reversi 1:73299b677405 81
rschiano75 5:90900ae27136 82 void at_send(uint8_t port, float hum, uint8_t ack = 0) {
rschiano75 5:90900ae27136 83 char msg[30];
rschiano75 5:90900ae27136 84 char send[64];
rschiano75 5:90900ae27136 85 uint8_t i=0;
rschiano75 5:90900ae27136 86 sprintf(msg,"{\"humidity\":%.2f}", hum);
rschiano75 5:90900ae27136 87 pc.printf(msg);
rschiano75 5:90900ae27136 88 pc.printf("\r\n");
rschiano75 5:90900ae27136 89 pc.printf("Lunghezza messaggio %d",(int)strlen(msg));
rschiano75 5:90900ae27136 90 pc.printf("\r\n");
rschiano75 5:90900ae27136 91 sprintf(send,"AT+SEND=%d,",port);
rschiano75 5:90900ae27136 92 for(i=0;i<strlen(msg);i++)
rschiano75 5:90900ae27136 93 {
rschiano75 5:90900ae27136 94 sprintf(send+11+2*i,"%X",*(msg+i));
rschiano75 5:90900ae27136 95 }
rschiano75 5:90900ae27136 96 sprintf(send+11+2*i,",%d",ack);
rschiano75 5:90900ae27136 97 modem_at_cmd(send);
rschiano75 5:90900ae27136 98 pc.printf(send);
rschiano75 5:90900ae27136 99 pc.printf("\r\nInviato send\r\n");
reversi 1:73299b677405 100 }
reversi 1:73299b677405 101
reversi 1:73299b677405 102 int main() {
reversi 1:73299b677405 103
reversi 1:73299b677405 104 if (init() != 0) {
reversi 1:73299b677405 105 pc.printf("Init failed");
reversi 1:73299b677405 106 return 1;
reversi 1:73299b677405 107 }
reversi 1:73299b677405 108
reversi 0:5b9fdd76a7d6 109 while(1) {
reversi 1:73299b677405 110 float humidity = 0;
reversi 0:5b9fdd76a7d6 111
reversi 0:5b9fdd76a7d6 112 if (ht_sensor->get_humidity(&humidity) != 0)
reversi 0:5b9fdd76a7d6 113 pc.printf("Error reading humidity\r\n");
reversi 1:73299b677405 114 else {
reversi 1:73299b677405 115 pc.printf("Humidity [%%]\t%f\r\n", humidity);
rschiano75 5:90900ae27136 116 at_send(10, humidity, 0);
reversi 1:73299b677405 117 }
reversi 2:0b1cbb0060bc 118 wait(5);
reversi 0:5b9fdd76a7d6 119 }
reversi 0:5b9fdd76a7d6 120 }
reversi 1:73299b677405 121
reversi 1:73299b677405 122
reversi 1:73299b677405 123 void modem_at_cmd(string buffer){
reversi 1:73299b677405 124 for(uint16_t i = 0; i < buffer.length(); i++) {
reversi 1:73299b677405 125 lora.putc(buffer[i]);
reversi 1:73299b677405 126 pc.putc(buffer[i]);
reversi 1:73299b677405 127 }
reversi 1:73299b677405 128 lora.putc(CR);
reversi 1:73299b677405 129 pc.putc(CR);
reversi 1:73299b677405 130 pc.printf("\n");
reversi 1:73299b677405 131
reversi 1:73299b677405 132 char c = 0;
reversi 1:73299b677405 133 do {
reversi 1:73299b677405 134 if (lora.readable()) {
reversi 1:73299b677405 135 c = lora.getc();
reversi 1:73299b677405 136 pc.putc(c);
reversi 1:73299b677405 137 }
reversi 1:73299b677405 138 } while(c != ' ');
reversi 1:73299b677405 139 }
reversi 1:73299b677405 140
reversi 1:73299b677405 141 void wait4join(){
reversi 1:73299b677405 142 char c = 0;
reversi 1:73299b677405 143 do {
reversi 1:73299b677405 144 if (lora.readable()) {
reversi 1:73299b677405 145 c = lora.getc();
reversi 1:73299b677405 146 pc.putc(c);
reversi 1:73299b677405 147 }
reversi 1:73299b677405 148 } while(c != 'd');
reversi 1:73299b677405 149 }