Sample program of SAKURA Internet IoT Communication Module

Dependencies:   SakuraIO mbed

View the Github repository.

Committer:
?? ????
Date:
Tue Nov 21 18:08:30 2017 +0900
Revision:
9:aa5a18093ade
Parent:
6:4ccdf8b1b007
Parent:
8:03a21e3d3c4c
Merge pull request #3 from sakuraio/feat/nucleo-pinassign

Add nucleo's pin assign

Who changed what in which revision?

UserRevisionLine numberNew contents of line
spiralray 0:40aec5afc650 1 #include "mbed.h"
spiralray 0:40aec5afc650 2 #include "SakuraIO.h"
spiralray 0:40aec5afc650 3
spiralray 0:40aec5afc650 4 Serial pc(USBTX, USBRX);
spiralray 0:40aec5afc650 5 DigitalOut myled(LED1);
spiralray 0:40aec5afc650 6
misodengaku 8:03a21e3d3c4c 7 #if defined(TARGET_NUCLEO_F042K6) || defined(TARGET_NUCLEO_F303K8)
misodengaku 8:03a21e3d3c4c 8 // Nucleo-32 series
misodengaku 8:03a21e3d3c4c 9 SPI spi(A6, A5, A4); // mosi, miso, sclk
misodengaku 8:03a21e3d3c4c 10 DigitalOut cs(A3);
misodengaku 8:03a21e3d3c4c 11 I2C i2c(D4, D5); // sda, scl
misodengaku 8:03a21e3d3c4c 12 #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_F446RE) || defined(TARGET_NUCLEO_L476RG)
misodengaku 8:03a21e3d3c4c 13 // Nucleo-64 series
misodengaku 8:03a21e3d3c4c 14 SPI spi(D11, D12, D13); // mosi, miso, sclk
misodengaku 8:03a21e3d3c4c 15 DigitalOut cs(D10);
misodengaku 8:03a21e3d3c4c 16 I2C i2c(D14, D15); // sda, scl
misodengaku 8:03a21e3d3c4c 17 #else
misodengaku 8:03a21e3d3c4c 18 // LPC1768 or others.
misodengaku 8:03a21e3d3c4c 19 SPI spi(p5, p6, p7); // mosi, miso, sclk
misodengaku 8:03a21e3d3c4c 20 DigitalOut cs(p8);
misodengaku 8:03a21e3d3c4c 21 I2C i2c(p9, p10); // sda, scl
misodengaku 8:03a21e3d3c4c 22 #endif
misodengaku 8:03a21e3d3c4c 23
spiralray 0:40aec5afc650 24 int main()
spiralray 0:40aec5afc650 25 {
spiralray 0:40aec5afc650 26 //SakuraIO_SPI sakuraio( spi, cs );
spiralray 0:40aec5afc650 27 SakuraIO_I2C sakuraio(i2c);
spiralray 0:40aec5afc650 28
spiralray 0:40aec5afc650 29
spiralray 0:40aec5afc650 30 pc.printf("Waiting to come online");
spiralray 0:40aec5afc650 31 for(;;) {
spiralray 0:40aec5afc650 32 if( (sakuraio.getConnectionStatus() & 0x80) == 0x80 ) break;
spiralray 0:40aec5afc650 33 pc.printf(".");
spiralray 0:40aec5afc650 34 wait_ms(1000);
spiralray 0:40aec5afc650 35 }
spiralray 0:40aec5afc650 36 pc.printf("\r\n");
spiralray 0:40aec5afc650 37
spiralray 0:40aec5afc650 38 uint8_t counter = 0;
spiralray 0:40aec5afc650 39
spiralray 0:40aec5afc650 40 while(1) {
chibiegg 3:6bf66fc3bc57 41 pc.printf("\r\n%02x\r\n", counter);
spiralray 0:40aec5afc650 42
spiralray 0:40aec5afc650 43 uint8_t request[33] = {};
spiralray 0:40aec5afc650 44 uint8_t response[33] = {};
spiralray 0:40aec5afc650 45
spiralray 0:40aec5afc650 46 // Echoback
spiralray 0:40aec5afc650 47 request[0] = counter;
spiralray 0:40aec5afc650 48 sakuraio.echoback(1, request, response);
chibiegg 3:6bf66fc3bc57 49 pc.printf("%02x\r\n", request[0]);
spiralray 0:40aec5afc650 50 pc.printf(" -> ");
chibiegg 3:6bf66fc3bc57 51 pc.printf("%02x\r\n", response[0]);
spiralray 0:40aec5afc650 52
spiralray 0:40aec5afc650 53 // Unixtime
spiralray 0:40aec5afc650 54 uint32_t unixtime = (uint32_t)(sakuraio.getUnixtime()/1000UL);
spiralray 0:40aec5afc650 55 pc.printf("Unixtime ");
chibiegg 3:6bf66fc3bc57 56 pc.printf("%d\r\n", unixtime);
spiralray 0:40aec5afc650 57
spiralray 0:40aec5afc650 58 // ADC
spiralray 0:40aec5afc650 59 uint16_t adc;
spiralray 0:40aec5afc650 60 adc = sakuraio.getADC(0);
spiralray 0:40aec5afc650 61 pc.printf("ADC0 ");
chibiegg 3:6bf66fc3bc57 62 pc.printf("%d\r\n", adc);
spiralray 0:40aec5afc650 63 adc = sakuraio.getADC(1);
spiralray 0:40aec5afc650 64 pc.printf("ADC1 ");
chibiegg 3:6bf66fc3bc57 65 pc.printf("%d\r\n", adc);
spiralray 0:40aec5afc650 66
spiralray 0:40aec5afc650 67 // ProductID
spiralray 0:40aec5afc650 68 uint16_t pid = sakuraio.getProductID();
spiralray 0:40aec5afc650 69 pc.printf("PID ");
chibiegg 3:6bf66fc3bc57 70 pc.printf("%d\r\n", pid);
spiralray 0:40aec5afc650 71
spiralray 0:40aec5afc650 72 // UniqueID
spiralray 0:40aec5afc650 73 sakuraio.getUniqueID((char *)response);
spiralray 0:40aec5afc650 74 pc.printf("UID ");
chibiegg 3:6bf66fc3bc57 75 pc.printf("%s\r\n", response);
spiralray 0:40aec5afc650 76
spiralray 0:40aec5afc650 77 // Version
spiralray 0:40aec5afc650 78 sakuraio.getFirmwareVersion((char *)response);
spiralray 0:40aec5afc650 79 pc.printf("Ver ");
chibiegg 3:6bf66fc3bc57 80 pc.printf("%s\r\n", response);
spiralray 0:40aec5afc650 81
spiralray 0:40aec5afc650 82 // Connection Status
spiralray 0:40aec5afc650 83 uint8_t connectionStatus = sakuraio.getConnectionStatus();
spiralray 0:40aec5afc650 84 pc.printf("Status ");
chibiegg 3:6bf66fc3bc57 85 pc.printf("%02x\r\n", connectionStatus);
spiralray 0:40aec5afc650 86
chibiegg 3:6bf66fc3bc57 87 //getSignalQuality
chibiegg 3:6bf66fc3bc57 88 uint8_t signalQuality = sakuraio.getSignalQuality();
spiralray 0:40aec5afc650 89 pc.printf("Quality ");
chibiegg 3:6bf66fc3bc57 90 pc.printf("%d\r\n", signalQuality);
spiralray 0:40aec5afc650 91
spiralray 0:40aec5afc650 92
spiralray 0:40aec5afc650 93 // Tx Queue
spiralray 0:40aec5afc650 94 uint8_t ret;
spiralray 0:40aec5afc650 95 ret = sakuraio.enqueueTx((uint8_t)0, (int32_t)counter);
spiralray 0:40aec5afc650 96 pc.printf("Enqueue ");
misodengaku 6:4ccdf8b1b007 97 pc.printf("%d\r\n", ret);
spiralray 0:40aec5afc650 98
spiralray 0:40aec5afc650 99 uint8_t avail;
spiralray 0:40aec5afc650 100 uint8_t queued;
spiralray 0:40aec5afc650 101 sakuraio.getTxQueueLength(&avail, &queued);
spiralray 0:40aec5afc650 102 pc.printf("Tx Available=");
spiralray 0:40aec5afc650 103 pc.printf("%d",avail);
spiralray 0:40aec5afc650 104 pc.printf(" Queued=");
chibiegg 3:6bf66fc3bc57 105 pc.printf("%d\r\n", queued);
spiralray 0:40aec5afc650 106
spiralray 0:40aec5afc650 107 if(queued >= 30) {
spiralray 0:40aec5afc650 108 ret = sakuraio.clearTx();
spiralray 0:40aec5afc650 109 pc.printf("Clear ");
chibiegg 3:6bf66fc3bc57 110 pc.printf("%02x\r\n" ,ret);
spiralray 0:40aec5afc650 111 } else if(queued >= 5) {
spiralray 0:40aec5afc650 112 ret = sakuraio.send();
spiralray 0:40aec5afc650 113 pc.printf("Send ");
chibiegg 3:6bf66fc3bc57 114 pc.printf("%02x\r\n", ret);
spiralray 0:40aec5afc650 115 }
spiralray 0:40aec5afc650 116
spiralray 0:40aec5afc650 117 // Rx Queue
spiralray 0:40aec5afc650 118 sakuraio.getRxQueueLength(&avail, &queued);
spiralray 0:40aec5afc650 119 pc.printf("Rx Available=");
chibiegg 3:6bf66fc3bc57 120 pc.printf("%d", avail);
spiralray 0:40aec5afc650 121 pc.printf(" Queued=");
chibiegg 3:6bf66fc3bc57 122 pc.printf("%d\r\n", queued);
chibiegg 3:6bf66fc3bc57 123
spiralray 0:40aec5afc650 124 for(uint8_t i=0; i<queued; i++) {
spiralray 0:40aec5afc650 125 uint8_t channel;
spiralray 0:40aec5afc650 126 uint8_t type;
spiralray 0:40aec5afc650 127 uint8_t values[8];
spiralray 0:40aec5afc650 128 int64_t offset;
spiralray 0:40aec5afc650 129 ret = sakuraio.dequeueRx(&channel, &type, values, &offset);
spiralray 0:40aec5afc650 130 pc.printf("Dequeue ");
chibiegg 3:6bf66fc3bc57 131 pc.printf("%02x", ret);
spiralray 0:40aec5afc650 132 if(ret == 0x01) {
spiralray 0:40aec5afc650 133 pc.printf(" ch=");
chibiegg 3:6bf66fc3bc57 134 pc.printf("%d", channel);
spiralray 0:40aec5afc650 135 pc.printf(" type=");
chibiegg 3:6bf66fc3bc57 136 pc.printf("%c", type);
spiralray 0:40aec5afc650 137 pc.printf(" values=[");
spiralray 0:40aec5afc650 138 for(uint8_t b=0; b<7; b++) {
chibiegg 3:6bf66fc3bc57 139 pc.printf("%02x ", values[b]);
spiralray 0:40aec5afc650 140 }
chibiegg 3:6bf66fc3bc57 141 pc.printf("%02x", values[7]);
spiralray 0:40aec5afc650 142 pc.printf("] offset=");
chibiegg 3:6bf66fc3bc57 143 pc.printf("%d\r\n", (int32_t)offset);
spiralray 0:40aec5afc650 144 } else {
spiralray 0:40aec5afc650 145 pc.printf(" ERROR\r\n");
spiralray 0:40aec5afc650 146 }
spiralray 0:40aec5afc650 147 }
spiralray 0:40aec5afc650 148
spiralray 0:40aec5afc650 149 wait_ms(1000);
spiralray 0:40aec5afc650 150 }
spiralray 0:40aec5afc650 151
spiralray 0:40aec5afc650 152 }