sakura.io Evalution board's example.

Dependencies:   AQM0802A BME280 MPU9250_SPI SakuraIO gps mbed

Fork of SakuraIO_Evaluation_Board_Standard by SAKURA Internet

sakura.io Evalution board's sample program. Collecting the onboard sensors(GPS, 9axis motion sensor, Environment sensor), send to sakura.io service.

Committer:
misodengaku
Date:
Thu Sep 07 08:32:10 2017 +0000
Revision:
0:db3ec2781484
Child:
1:faf04d99f302
init

Who changed what in which revision?

UserRevisionLine numberNew contents of line
misodengaku 0:db3ec2781484 1 #include <mbed.h>
misodengaku 0:db3ec2781484 2 #include <AQM0802A.h>
misodengaku 0:db3ec2781484 3 #include <BME280.h>
misodengaku 0:db3ec2781484 4 #include <MPU9250.h>
misodengaku 0:db3ec2781484 5 #include <SakuraIO.h>
misodengaku 0:db3ec2781484 6 #include "SakuraPinNames.h"
misodengaku 0:db3ec2781484 7 #include "sensors.h"
misodengaku 0:db3ec2781484 8
misodengaku 0:db3ec2781484 9 // Serial over CMSIS_DAP
misodengaku 0:db3ec2781484 10 Serial pc(DAP_UART_TX, DAP_UART_RX, 9600);
misodengaku 0:db3ec2781484 11
misodengaku 0:db3ec2781484 12 // GPS
misodengaku 0:db3ec2781484 13 Serial gps(GPS_TX, GPS_RX, 9600);
misodengaku 0:db3ec2781484 14 DigitalOut gps_en(GPS_EN);
misodengaku 0:db3ec2781484 15
misodengaku 0:db3ec2781484 16 // LED
misodengaku 0:db3ec2781484 17 DigitalOut led_1(LED1);
misodengaku 0:db3ec2781484 18 DigitalOut led_2(LED2);
misodengaku 0:db3ec2781484 19 DigitalOut led_3(LED3);
misodengaku 0:db3ec2781484 20 DigitalOut led_4(LED4);
misodengaku 0:db3ec2781484 21
misodengaku 0:db3ec2781484 22 // LCD backlight
misodengaku 0:db3ec2781484 23 DigitalOut lcd_led(LED_LCD);
misodengaku 0:db3ec2781484 24
misodengaku 0:db3ec2781484 25 // Switch
misodengaku 0:db3ec2781484 26 DigitalIn sw_1(SW1);
misodengaku 0:db3ec2781484 27 DigitalIn sw_2(SW2);
misodengaku 0:db3ec2781484 28 DigitalIn sw_3(SW3);
misodengaku 0:db3ec2781484 29 DigitalIn sw_4(SW4);
misodengaku 0:db3ec2781484 30 DigitalIn sw_5(SW5);
misodengaku 0:db3ec2781484 31 DigitalIn sw_6(SW6);
misodengaku 0:db3ec2781484 32
misodengaku 0:db3ec2781484 33 // Internal I2C
misodengaku 0:db3ec2781484 34 I2C internal_i2c(I2C_INTERNAL_SDA, I2C_INTERNAL_SCL);
misodengaku 0:db3ec2781484 35 AQM0802A lcd(internal_i2c);
misodengaku 0:db3ec2781484 36 BME280 bme280(internal_i2c);
misodengaku 0:db3ec2781484 37
misodengaku 0:db3ec2781484 38 // SPI
misodengaku 0:db3ec2781484 39 SPI internal_mpu9250_spi(SPI_MPU_MOSI, SPI_MPU_MISO, SPI_MPU_SCK);
misodengaku 0:db3ec2781484 40 mpu9250_spi mpu9250(internal_mpu9250_spi, SPI_MPU_CS);
misodengaku 0:db3ec2781484 41
misodengaku 0:db3ec2781484 42 // sakura.io
misodengaku 0:db3ec2781484 43 SakuraIO_I2C sakuraio(I2C_SDA, I2C_SCL);
misodengaku 0:db3ec2781484 44
misodengaku 0:db3ec2781484 45 SensorData sensor_data;
misodengaku 0:db3ec2781484 46
misodengaku 0:db3ec2781484 47
misodengaku 0:db3ec2781484 48 void setup()
misodengaku 0:db3ec2781484 49 {
misodengaku 0:db3ec2781484 50 lcd_led = 1;
misodengaku 0:db3ec2781484 51 pc.printf("Hello World !\r\n");
misodengaku 0:db3ec2781484 52 lcd.cls();
misodengaku 0:db3ec2781484 53 lcd.printf("Hello");
misodengaku 0:db3ec2781484 54
misodengaku 0:db3ec2781484 55 // Initialize sensors
misodengaku 0:db3ec2781484 56 bme280.initialize();
misodengaku 0:db3ec2781484 57 pc.printf("BME280 ok.\r\n");
misodengaku 0:db3ec2781484 58 mpu9250.init(1, BITS_DLPF_CFG_188HZ);
misodengaku 0:db3ec2781484 59 pc.printf("MPU9250 ok. WHOAMI=%02x\r\n", mpu9250.whoami());
misodengaku 0:db3ec2781484 60 if (mpu9250.whoami() != 0x71) {
misodengaku 0:db3ec2781484 61 pc.printf("[ERROR] MPU9250 init fail.\r\n");
misodengaku 0:db3ec2781484 62 }
misodengaku 0:db3ec2781484 63
misodengaku 0:db3ec2781484 64 mpu9250.set_gyro_scale(BITS_FS_2000DPS); //Set full scale range for gyros
misodengaku 0:db3ec2781484 65 mpu9250.set_acc_scale(BITS_FS_16G); //Set full scale range for accs
misodengaku 0:db3ec2781484 66 mpu9250.calib_acc();
misodengaku 0:db3ec2781484 67 mpu9250.AK8963_calib_Magnetometer();
misodengaku 0:db3ec2781484 68
misodengaku 0:db3ec2781484 69 gps_en = 1;
misodengaku 0:db3ec2781484 70 }
misodengaku 0:db3ec2781484 71
misodengaku 0:db3ec2781484 72 void read_sensor_data()
misodengaku 0:db3ec2781484 73 {
misodengaku 0:db3ec2781484 74 sensor_data.bme280.temperature = bme280.getTemperature();
misodengaku 0:db3ec2781484 75 sensor_data.bme280.pressure = bme280.getPressure();
misodengaku 0:db3ec2781484 76 sensor_data.bme280.humidity = bme280.getHumidity();
misodengaku 0:db3ec2781484 77
misodengaku 0:db3ec2781484 78 mpu9250.read_all();
misodengaku 0:db3ec2781484 79 sensor_data.mpu9250.temperature = mpu9250.Temperature;
misodengaku 0:db3ec2781484 80 for (int i = 0; i < 3; i++) {
misodengaku 0:db3ec2781484 81 sensor_data.mpu9250.accelerometer[i] = mpu9250.accelerometer_data[i];
misodengaku 0:db3ec2781484 82 sensor_data.mpu9250.gyroscope[i] = mpu9250.gyroscope_data[i];
misodengaku 0:db3ec2781484 83 sensor_data.mpu9250.magnetometer[i] = mpu9250.Magnetometer[i];
misodengaku 0:db3ec2781484 84 }
misodengaku 0:db3ec2781484 85 }
misodengaku 0:db3ec2781484 86
misodengaku 0:db3ec2781484 87 void enqueue_sensor_data(int counter)
misodengaku 0:db3ec2781484 88 {
misodengaku 0:db3ec2781484 89 sakuraio.enqueueTx(0, counter);
misodengaku 0:db3ec2781484 90 sakuraio.enqueueTx(1, sensor_data.bme280.temperature);
misodengaku 0:db3ec2781484 91 sakuraio.enqueueTx(2, sensor_data.bme280.pressure);
misodengaku 0:db3ec2781484 92 sakuraio.enqueueTx(3, sensor_data.bme280.humidity);
misodengaku 0:db3ec2781484 93
misodengaku 0:db3ec2781484 94 sakuraio.enqueueTx(4, sensor_data.mpu9250.temperature); // これいる?
misodengaku 0:db3ec2781484 95 sakuraio.enqueueTx(5, sensor_data.mpu9250.accelerometer[0]);
misodengaku 0:db3ec2781484 96 sakuraio.enqueueTx(6, sensor_data.mpu9250.accelerometer[1]);
misodengaku 0:db3ec2781484 97 sakuraio.enqueueTx(7, sensor_data.mpu9250.accelerometer[2]);
misodengaku 0:db3ec2781484 98 sakuraio.enqueueTx(8, sensor_data.mpu9250.gyroscope[0]);
misodengaku 0:db3ec2781484 99 sakuraio.enqueueTx(9, sensor_data.mpu9250.gyroscope[1]);
misodengaku 0:db3ec2781484 100 sakuraio.enqueueTx(10, sensor_data.mpu9250.gyroscope[2]);
misodengaku 0:db3ec2781484 101 sakuraio.enqueueTx(11, sensor_data.mpu9250.magnetometer[0]);
misodengaku 0:db3ec2781484 102 sakuraio.enqueueTx(12, sensor_data.mpu9250.magnetometer[1]);
misodengaku 0:db3ec2781484 103 sakuraio.enqueueTx(13, sensor_data.mpu9250.magnetometer[2]);
misodengaku 0:db3ec2781484 104 //sakuraio.enqueueTx(14, lon);
misodengaku 0:db3ec2781484 105 //sakuraio.enqueueTx(15, lat);
misodengaku 0:db3ec2781484 106 }
misodengaku 0:db3ec2781484 107
misodengaku 0:db3ec2781484 108
misodengaku 0:db3ec2781484 109 void loop()
misodengaku 0:db3ec2781484 110 {
misodengaku 0:db3ec2781484 111 pc.printf("\r\n\r\nGPS\r\n");
misodengaku 0:db3ec2781484 112 while(gps.readable()) {
misodengaku 0:db3ec2781484 113 pc.putc(gps.getc());
misodengaku 0:db3ec2781484 114 }
misodengaku 0:db3ec2781484 115 pc.printf("\r\n");
misodengaku 0:db3ec2781484 116 static int i = 1;
misodengaku 0:db3ec2781484 117 read_sensor_data();
misodengaku 0:db3ec2781484 118 wait(1);
misodengaku 0:db3ec2781484 119 pc.printf("This program runs since %d seconds.\r\n", i);
misodengaku 0:db3ec2781484 120 pc.printf("BME280\r\n");
misodengaku 0:db3ec2781484 121 pc.printf("\tTemp: %fC\r\n", sensor_data.bme280.temperature);
misodengaku 0:db3ec2781484 122 pc.printf("\tPres: %fhPa\r\n", sensor_data.bme280.pressure);
misodengaku 0:db3ec2781484 123 pc.printf("\tHum: %f%%\r\n", sensor_data.bme280.humidity);
misodengaku 0:db3ec2781484 124 pc.printf("MPU9250\r\n");
misodengaku 0:db3ec2781484 125 pc.printf("\tTemp: %fC\r\n", sensor_data.mpu9250.temperature);
misodengaku 0:db3ec2781484 126 for (int j = 0; j < 3; j++) {
misodengaku 0:db3ec2781484 127 pc.printf("\tacc[%d]: %f\r\n", j, sensor_data.mpu9250.accelerometer[j]);
misodengaku 0:db3ec2781484 128 pc.printf("\tgyro[%d]: %f\r\n", j, sensor_data.mpu9250.gyroscope[j]);
misodengaku 0:db3ec2781484 129 pc.printf("\tmag[%d]: %f\r\n", j, sensor_data.mpu9250.magnetometer[j]);
misodengaku 0:db3ec2781484 130 }
misodengaku 0:db3ec2781484 131 lcd.cls();
misodengaku 0:db3ec2781484 132 if( (sakuraio.getConnectionStatus() & 0x80) == 0x80 ) {
misodengaku 0:db3ec2781484 133 lcd.printf("Online\n", i);
misodengaku 0:db3ec2781484 134 } else {
misodengaku 0:db3ec2781484 135 lcd.printf("Offline\n", i);
misodengaku 0:db3ec2781484 136 }
misodengaku 0:db3ec2781484 137 lcd.printf("%d", i);
misodengaku 0:db3ec2781484 138 i++;
misodengaku 0:db3ec2781484 139 led_1 = !led_1;
misodengaku 0:db3ec2781484 140 led_4 = !sw_4;
misodengaku 0:db3ec2781484 141
misodengaku 0:db3ec2781484 142 enqueue_sensor_data(i);
misodengaku 0:db3ec2781484 143 sakuraio.send();
misodengaku 0:db3ec2781484 144 }
misodengaku 0:db3ec2781484 145
misodengaku 0:db3ec2781484 146
misodengaku 0:db3ec2781484 147 int main()
misodengaku 0:db3ec2781484 148 {
misodengaku 0:db3ec2781484 149 setup();
misodengaku 0:db3ec2781484 150 while(1) {
misodengaku 0:db3ec2781484 151 loop();
misodengaku 0:db3ec2781484 152 }
misodengaku 0:db3ec2781484 153 }