get humidity data and send to LoRa gateway
Dependencies: mbed X_NUCLEO_IKS01A2
main.cpp@5:90900ae27136, 2020-04-22 (annotated)
- 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?
User | Revision | Line number | New 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 | } |