IoT - Kubus / Mbed 2 deprecated Kubus

Dependencies:   mbed nRF24L01P

Committer:
Bartosz Stebel
Date:
Thu Jan 19 13:19:55 2017 +0100
Revision:
60:b419ea9472de
Parent:
56:065bd3a75d97
Child:
63:74df96c098e4
finally fix wifi

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pannaannap 5:fbd5b1e953e6 1 #include "common.h"
pannaannap 7:e51d0fbb1a25 2 #include "master.h"
pannaannap 5:fbd5b1e953e6 3
pannaanna 39:381993764b40 4 #include "cantcoap.h"
sbarzowski 10:869163c7929d 5 #include <sstream>
sbarzowski 10:869163c7929d 6
pannaannap 7:e51d0fbb1a25 7 int master_loop() {
pannaannap 7:e51d0fbb1a25 8 Serial pc(USBTX, USBRX); // tx, rx
pannaanna 39:381993764b40 9 Serial wifi(PA_9, PA_10);
Bartosz Stebel 53:b2c949470f4e 10 DigitalOut frm(PC_8);
pannaannap 7:e51d0fbb1a25 11 nRF24L01P radio(PB_15, PB_14, PB_13, PB_12, PB_1, PB_2); // mosi, miso, sck, csn, ce, irq
Micha? ?azowik 50:e83e38fece23 12
Micha? ?azowik 56:065bd3a75d97 13 const unsigned long long RX_ADDRESS = MASTER_ADDRESS;
Micha? ?azowik 56:065bd3a75d97 14 const unsigned long long TX_ADDRESS = BOARD1_ADDRESS;
Micha? ?azowik 56:065bd3a75d97 15
pannaannap 5:fbd5b1e953e6 16 char rxData[TRANSFER_SIZE];
pannaannap 5:fbd5b1e953e6 17
pannaannap 5:fbd5b1e953e6 18 pc.baud(115200);
pannaanna 39:381993764b40 19 wifi.baud(115200);
Micha? ?azowik 50:e83e38fece23 20
Micha? ?azowik 56:065bd3a75d97 21 radio_init(&radio, RX_ADDRESS, TX_ADDRESS);
pannaanna 39:381993764b40 22
pannaannap 5:fbd5b1e953e6 23 // Display the (default) setup of the nRF24L01+ chip
pannaannap 5:fbd5b1e953e6 24 pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", radio.getRfFrequency() );
pannaannap 5:fbd5b1e953e6 25 pc.printf( "nRF24L01+ Output power : %d dBm\r\n", radio.getRfOutputPower() );
pannaannap 5:fbd5b1e953e6 26 pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", radio.getAirDataRate() );
pannaannap 5:fbd5b1e953e6 27 pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", radio.getTxAddress() );
pannaannap 5:fbd5b1e953e6 28 pc.printf( "nRF24L01+ RX0 Address : 0x%010llX\r\n", radio.getRxAddress(NRF24L01P_PIPE_P0) );
pannaannap 5:fbd5b1e953e6 29 pc.printf( "nRF24L01+ RX1 Address : 0x%010llX\r\n", radio.getRxAddress(NRF24L01P_PIPE_P1) );
pannaannap 5:fbd5b1e953e6 30
Bartosz Stebel 60:b419ea9472de 31 frm = 0;
pannaannap 5:fbd5b1e953e6 32 while (1) {
Micha? ?azowik 56:065bd3a75d97 33 if(radio.readable(NRF24L01P_PIPE_P1)){
Bartosz Stebel 60:b419ea9472de 34 frm = 1;
Micha? ?azowik 56:065bd3a75d97 35 int rx_bytes = radio.read(NRF24L01P_PIPE_P1, rxData, sizeof(rxData));
Bartosz Stebel 60:b419ea9472de 36 uint8_t pdu_buffer[100] = {0};
Bartosz Stebel 60:b419ea9472de 37 CoapPDU pdu(pdu_buffer+1, 99, 0);
Micha? ?azowik 56:065bd3a75d97 38 pdu.setVersion(1);
Micha? ?azowik 56:065bd3a75d97 39 pdu.setType(CoapPDU::COAP_NON_CONFIRMABLE);
Micha? ?azowik 56:065bd3a75d97 40 pdu.setCode(CoapPDU::COAP_POST);
Bartosz Stebel 60:b419ea9472de 41 //pdu.setToken((uint8_t*)"\3\2\1\1",4);
Bartosz Stebel 60:b419ea9472de 42 pdu.setToken(NULL,0); // *maybe* can be empty, see rfc7252 section 5.3.1
Bartosz Stebel 60:b419ea9472de 43 static uint16_t msgid = 0; //TODO endian?
Bartosz Stebel 60:b419ea9472de 44 pdu.setMessageID(msgid++); //will overflow, that is okay (rfc again)
Bartosz Stebel 60:b419ea9472de 45
Micha? ?azowik 56:065bd3a75d97 46 std::string output = str_hex(rxData, rx_bytes);
Micha? ?azowik 56:065bd3a75d97 47 //wifi.printf("received: %s\r\n", output.c_str());
Micha? ?azowik 56:065bd3a75d97 48 pc.printf("received: %s\r\n", output.c_str());
Micha? ?azowik 56:065bd3a75d97 49 Data d;
Micha? ?azowik 56:065bd3a75d97 50 d.deserialize(std::string(rxData, 32));
Micha? ?azowik 56:065bd3a75d97 51 std::stringstream ss;
Bartosz Stebel 54:2551a3c781cf 52
Micha? ?azowik 56:065bd3a75d97 53 for (int i = 0; i < rx_bytes; ++i) {
Micha? ?azowik 56:065bd3a75d97 54 ss << std::hex << rxData[i] / 16 << rxData[i] % 16; // ugly!
Micha? ?azowik 56:065bd3a75d97 55 }
Micha? ?azowik 56:065bd3a75d97 56 pc.printf("received: %s|id %d \r\n", ss.str().c_str(), d.type);
Micha? ?azowik 56:065bd3a75d97 57 //wifi.printf("received: %s, pkt:", ss.str().c_str());
Bartosz Stebel 52:917b3f31cad3 58
Bartosz Stebel 60:b419ea9472de 59 char uribuf[64] = {0};
Bartosz Stebel 60:b419ea9472de 60 char pbuf[32] = {0};
Bartosz Stebel 60:b419ea9472de 61 int psize = 0;
Micha? ?azowik 56:065bd3a75d97 62 switch(d.type) {
Micha? ?azowik 56:065bd3a75d97 63 case PIR1:
Micha? ?azowik 56:065bd3a75d97 64 strcpy(uribuf, "pir1");
Bartosz Stebel 60:b419ea9472de 65 psize = sprintf(pbuf, "%d", d.value.i);
Micha? ?azowik 56:065bd3a75d97 66 break;
Micha? ?azowik 56:065bd3a75d97 67 case PIR2:
Micha? ?azowik 56:065bd3a75d97 68 strcpy(uribuf, "pir2");
Bartosz Stebel 60:b419ea9472de 69 psize = sprintf(pbuf, "%d", d.value.i);
Micha? ?azowik 56:065bd3a75d97 70 break;
Micha? ?azowik 56:065bd3a75d97 71 case DISTANCE:
Micha? ?azowik 56:065bd3a75d97 72 strcpy(uribuf, "distance");
Bartosz Stebel 60:b419ea9472de 73 psize = sprintf(pbuf, "%f", d.value.f);
Micha? ?azowik 56:065bd3a75d97 74 break;
Micha? ?azowik 56:065bd3a75d97 75 case SOUND:
Micha? ?azowik 56:065bd3a75d97 76 strcpy(uribuf, "sound");
Bartosz Stebel 60:b419ea9472de 77 psize = sprintf(pbuf, "%f", d.value.f);
Micha? ?azowik 56:065bd3a75d97 78 break;
Micha? ?azowik 56:065bd3a75d97 79 }
Micha? ?azowik 56:065bd3a75d97 80 pdu.setURI(uribuf,strlen(uribuf));
Bartosz Stebel 54:2551a3c781cf 81
Micha? ?azowik 56:065bd3a75d97 82 pdu.setPayload((uint8_t*)pbuf, psize);
Micha? ?azowik 56:065bd3a75d97 83 frm = 0;
Bartosz Stebel 60:b419ea9472de 84 //wait(0.1);
Bartosz Stebel 60:b419ea9472de 85 //wifi.write((uint8_t*)test, sizeof(test), 0, 0);
Bartosz Stebel 60:b419ea9472de 86 //uint8_t hdr[3] = {0x7e, 0, pdu.getPDULength()};
Bartosz Stebel 60:b419ea9472de 87 //wifi.write(hdr, 3, 0, 0);
Bartosz Stebel 60:b419ea9472de 88 wait(0.01);
Bartosz Stebel 60:b419ea9472de 89 wifi.write(pdu_buffer, pdu.getPDULength()+1, 0, 0);
Bartosz Stebel 60:b419ea9472de 90 //wait(0.1);
Bartosz Stebel 60:b419ea9472de 91 //uint8_t end = 0xce;
Bartosz Stebel 60:b419ea9472de 92 //wifi.write(&end, 1, 0, 0);
Micha? ?azowik 56:065bd3a75d97 93 wait(0.1);
Micha? ?azowik 56:065bd3a75d97 94 frm = 1;
Micha? ?azowik 56:065bd3a75d97 95 //wifi.printf("\n");
pannaannap 5:fbd5b1e953e6 96 }
pannaannap 5:fbd5b1e953e6 97 }
pannaannap 5:fbd5b1e953e6 98 }