Temperatura

Dependencies:   mbed X_NUCLEO_IKS01A2

main.cpp

Committer:
Mefistofelico
Date:
2020-04-23
Revision:
1:8d29427339c0
Parent:
0:1473d1ad6c5d

File content as of revision 1:8d29427339c0:

#include "mbed.h"
#include "string.h"
#include "XNucleoIKS01A2.h"

void modem_at_cmd(char*,int);
void wait4join(void);
void lora_conn(void);

static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5);
static HTS221Sensor *temperature = mems_expansion_board -> ht_sensor;

char* msg1 = {"AT"};
char* msg2 = {"AT+APPEUI=0000000000000001"};
char* msg3 = {"AT+AK=00000000000000000000000000000001"};
char* msg4 = {"AT+JOIN=1"};
char msg5[64];
char msg6[80];

char c;
float val_temperature;
uint8_t id;

Serial pc(D1, D0, 115200);
Serial lora(PB_6, PA_10, 115200);

int main()
{
    temperature->enable();
    pc.printf("\r\n--- Starting new run ---\r\n");
    temperature->read_id(&id);
    pc.printf("HTS221 Sensor = 0x%X\r\n", id);
    lora_conn();
    while(1) {
        int i = 0;
        pc.printf("\r\n");
        temperature -> get_temperature(&val_temperature);
        pc.printf("temperatura [Celsius]:\t%f\n\r", val_temperature);
        memset(msg5, 0, 64*sizeof(char)); // fill msg5 of zeros
        sprintf(msg5, "{\"temp\": %f}", val_temperature); // converte in stringa c msg5
        pc.printf(msg5);
        pc.printf("\r\n");
        pc.printf("Lunghezza messaggio %d", (int)strlen(msg5));
        pc.printf("\r\n");
        sprintf(msg6, "AT+SEND=15,");
        for(i = 0; i<strlen(msg5); i++) {
            sprintf(msg6+11+2*i, "%X", *(msg5+i));
        }
        sprintf(msg6+11+2*i,",0");
        modem_at_cmd(msg6,(int)strlen(msg6));
        pc.printf("Inviato send\r\n");
        wait(3);
    }
}

void modem_at_cmd(char* buffer, int n) {
    for(uint8_t i=0; i<n; i++) {
        lora.putc(buffer[i]);
        pc.putc(buffer[i]);
    }
    lora.putc(13);
    pc.putc(13);
    pc.printf("\n");
    c = 0;
    do {
        if (lora.readable()) {
            c = lora.getc();
            pc.putc(c);
        }
    } while(c!=' ');
}

void wait4join() {
    c = 0;
    do {
        if (lora.readable()) {
            c = lora.getc();
            pc.putc(c);
        }
    } while(c != 'd');
}

void lora_conn() {
    pc.printf("Connessione al modem\r\n");
    modem_at_cmd(msg1,(int)strlen(msg1));
    pc.printf("Inviato AT\r\n");
    wait(1);
    modem_at_cmd(msg2,(int)strlen(msg2));
    pc.printf("Inviato EUI\r\n");
    wait(1);
    modem_at_cmd(msg3,(int)strlen(msg3));
    pc.printf("Inviato AK\r\n");
    wait(1);
    modem_at_cmd("AT+ADR=1",(int)strlen("AT+ADR=1"));
    pc.printf("Inviato AK\r\n");
    wait(1);
    modem_at_cmd("AT+DC=0",(int)strlen("AT+DC=0"));
    pc.printf("Inviato AK\r\n");
    wait(1);
    modem_at_cmd(msg4,(int)strlen(msg4));
    pc.printf("Inviato JOIN\r\n");
    wait4join();
}