get humidity data and send to LoRa gateway
Dependencies: mbed X_NUCLEO_IKS01A2
main.cpp
- Committer:
- rschiano75
- Date:
- 2020-04-22
- Revision:
- 5:90900ae27136
- Parent:
- 4:4a012fc4ecc4
File content as of revision 5:90900ae27136:
#include "mbed.h"
#include "XNucleoIKS01A2.h"
#include <string>
#include <sstream>
#define CR 0x0D
using namespace std;
void modem_at_cmd(string);
void wait4join(void);
Serial pc(D1, D0, 115200);
Serial lora(PB_6, PA_10, 115200);
static XNucleoIKS01A2* board = XNucleoIKS01A2::instance(D14, D15, D4, D5);
static HTS221Sensor *ht_sensor = board->ht_sensor;
char* msgSend[64];
void join_lora_gateway(string eui = "0000000000000001", string ak = "00000000000000000000000000000001", string join_method = "1") {
pc.printf("Test seriale no pc\r\n");
modem_at_cmd("AT");
pc.printf("Inviato AT\r\n");
wait(1);
modem_at_cmd("AT+APPEUI="+eui);
pc.printf("Inviato EUI\r\n");
wait(1);
modem_at_cmd("AT+AK="+ak);
pc.printf("Inviato AK\r\n");
wait(1);
modem_at_cmd("AT+JOIN="+join_method);
pc.printf("Inviato JOIN\r\n");
wait4join();
modem_at_cmd("AT+DC=0");
pc.printf("Disabled DC\r\n");
wait(1);
modem_at_cmd("AT+ADR=1");
pc.printf("Enabled ADR\r\n");
wait(1);
}
string string_to_hex(string input)
{
static const char hex_digits[] = "0123456789ABCDEF";
std::string output;
output.reserve(input.length() * 2);
for (int i = 0; i < input.length(); i++)
{
output[2*i] = hex_digits[input[i] >> 4];
output[2*i+1] = (hex_digits[input[i] & 15]);
}
return output;
}
int init() {
pc.printf("Initialization..\r\n");
uint8_t id;
int error_code = ht_sensor->read_id(&id);
if (error_code != 0) {
pc.printf("Error %d reading sensor ID\r\n", error_code);
return 1;
}
pc.printf("Connected to sensor with ID 0x%x\r\n", id);
if (ht_sensor->enable() != 0) {
pc.printf("Error enabling the ht sensor\r\n");
return 2;
}
if (ht_sensor->set_odr(1.0f) != 0) {
pc.printf("Error setting ODR\r\n");
return 3;
}
join_lora_gateway();
return 0;
}
void at_send(uint8_t port, float hum, uint8_t ack = 0) {
char msg[30];
char send[64];
uint8_t i=0;
sprintf(msg,"{\"humidity\":%.2f}", hum);
pc.printf(msg);
pc.printf("\r\n");
pc.printf("Lunghezza messaggio %d",(int)strlen(msg));
pc.printf("\r\n");
sprintf(send,"AT+SEND=%d,",port);
for(i=0;i<strlen(msg);i++)
{
sprintf(send+11+2*i,"%X",*(msg+i));
}
sprintf(send+11+2*i,",%d",ack);
modem_at_cmd(send);
pc.printf(send);
pc.printf("\r\nInviato send\r\n");
}
int main() {
if (init() != 0) {
pc.printf("Init failed");
return 1;
}
while(1) {
float humidity = 0;
if (ht_sensor->get_humidity(&humidity) != 0)
pc.printf("Error reading humidity\r\n");
else {
pc.printf("Humidity [%%]\t%f\r\n", humidity);
at_send(10, humidity, 0);
}
wait(5);
}
}
void modem_at_cmd(string buffer){
for(uint16_t i = 0; i < buffer.length(); i++) {
lora.putc(buffer[i]);
pc.putc(buffer[i]);
}
lora.putc(CR);
pc.putc(CR);
pc.printf("\n");
char c = 0;
do {
if (lora.readable()) {
c = lora.getc();
pc.putc(c);
}
} while(c != ' ');
}
void wait4join(){
char c = 0;
do {
if (lora.readable()) {
c = lora.getc();
pc.putc(c);
}
} while(c != 'd');
}