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.

Revision:
0:db3ec2781484
Child:
1:faf04d99f302
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Sep 07 08:32:10 2017 +0000
@@ -0,0 +1,153 @@
+#include <mbed.h>
+#include <AQM0802A.h>
+#include <BME280.h>
+#include <MPU9250.h>
+#include <SakuraIO.h>
+#include "SakuraPinNames.h"
+#include "sensors.h"
+
+// Serial over CMSIS_DAP
+Serial pc(DAP_UART_TX, DAP_UART_RX, 9600);
+
+// GPS
+Serial gps(GPS_TX, GPS_RX, 9600);
+DigitalOut gps_en(GPS_EN);
+
+// LED
+DigitalOut led_1(LED1);
+DigitalOut led_2(LED2);
+DigitalOut led_3(LED3);
+DigitalOut led_4(LED4);
+
+// LCD backlight
+DigitalOut lcd_led(LED_LCD);
+
+// Switch
+DigitalIn sw_1(SW1);
+DigitalIn sw_2(SW2);
+DigitalIn sw_3(SW3);
+DigitalIn sw_4(SW4);
+DigitalIn sw_5(SW5);
+DigitalIn sw_6(SW6);
+
+// Internal I2C
+I2C internal_i2c(I2C_INTERNAL_SDA, I2C_INTERNAL_SCL);
+AQM0802A lcd(internal_i2c);
+BME280 bme280(internal_i2c);
+
+// SPI
+SPI internal_mpu9250_spi(SPI_MPU_MOSI, SPI_MPU_MISO, SPI_MPU_SCK);
+mpu9250_spi mpu9250(internal_mpu9250_spi, SPI_MPU_CS);
+
+// sakura.io
+SakuraIO_I2C sakuraio(I2C_SDA, I2C_SCL);
+
+SensorData sensor_data;
+
+
+void setup()
+{
+    lcd_led = 1;
+    pc.printf("Hello World !\r\n");
+    lcd.cls();
+    lcd.printf("Hello");
+
+    // Initialize sensors
+    bme280.initialize();
+    pc.printf("BME280 ok.\r\n");
+    mpu9250.init(1, BITS_DLPF_CFG_188HZ);
+    pc.printf("MPU9250 ok. WHOAMI=%02x\r\n", mpu9250.whoami());
+    if (mpu9250.whoami() != 0x71) {
+        pc.printf("[ERROR] MPU9250 init fail.\r\n");
+    }
+
+    mpu9250.set_gyro_scale(BITS_FS_2000DPS);    //Set full scale range for gyros
+    mpu9250.set_acc_scale(BITS_FS_16G);          //Set full scale range for accs
+    mpu9250.calib_acc();
+    mpu9250.AK8963_calib_Magnetometer();
+
+    gps_en = 1;
+}
+
+void read_sensor_data()
+{
+    sensor_data.bme280.temperature = bme280.getTemperature();
+    sensor_data.bme280.pressure = bme280.getPressure();
+    sensor_data.bme280.humidity = bme280.getHumidity();
+
+    mpu9250.read_all();
+    sensor_data.mpu9250.temperature = mpu9250.Temperature;
+    for (int i = 0; i < 3; i++) {
+        sensor_data.mpu9250.accelerometer[i] = mpu9250.accelerometer_data[i];
+        sensor_data.mpu9250.gyroscope[i] = mpu9250.gyroscope_data[i];
+        sensor_data.mpu9250.magnetometer[i] =  mpu9250.Magnetometer[i];
+    }
+}
+
+void enqueue_sensor_data(int counter)
+{
+    sakuraio.enqueueTx(0, counter);
+    sakuraio.enqueueTx(1, sensor_data.bme280.temperature);
+    sakuraio.enqueueTx(2, sensor_data.bme280.pressure);
+    sakuraio.enqueueTx(3, sensor_data.bme280.humidity);
+    
+    sakuraio.enqueueTx(4, sensor_data.mpu9250.temperature); // これいる?
+    sakuraio.enqueueTx(5, sensor_data.mpu9250.accelerometer[0]);
+    sakuraio.enqueueTx(6, sensor_data.mpu9250.accelerometer[1]);
+    sakuraio.enqueueTx(7, sensor_data.mpu9250.accelerometer[2]);
+    sakuraio.enqueueTx(8, sensor_data.mpu9250.gyroscope[0]);
+    sakuraio.enqueueTx(9, sensor_data.mpu9250.gyroscope[1]);
+    sakuraio.enqueueTx(10, sensor_data.mpu9250.gyroscope[2]);
+    sakuraio.enqueueTx(11, sensor_data.mpu9250.magnetometer[0]);
+    sakuraio.enqueueTx(12, sensor_data.mpu9250.magnetometer[1]);
+    sakuraio.enqueueTx(13, sensor_data.mpu9250.magnetometer[2]);
+    //sakuraio.enqueueTx(14, lon);
+    //sakuraio.enqueueTx(15, lat);
+}
+
+
+void loop()
+{
+    pc.printf("\r\n\r\nGPS\r\n");
+    while(gps.readable()) {
+        pc.putc(gps.getc());
+    }
+    pc.printf("\r\n");
+    static int i = 1;
+    read_sensor_data();
+    wait(1);
+    pc.printf("This program runs since %d seconds.\r\n", i);
+    pc.printf("BME280\r\n");
+    pc.printf("\tTemp: %fC\r\n", sensor_data.bme280.temperature);
+    pc.printf("\tPres: %fhPa\r\n", sensor_data.bme280.pressure);
+    pc.printf("\tHum: %f%%\r\n", sensor_data.bme280.humidity);
+    pc.printf("MPU9250\r\n");
+    pc.printf("\tTemp: %fC\r\n", sensor_data.mpu9250.temperature);
+    for (int j = 0; j < 3; j++) {
+        pc.printf("\tacc[%d]: %f\r\n", j, sensor_data.mpu9250.accelerometer[j]);
+        pc.printf("\tgyro[%d]: %f\r\n", j, sensor_data.mpu9250.gyroscope[j]);
+        pc.printf("\tmag[%d]: %f\r\n", j, sensor_data.mpu9250.magnetometer[j]);
+    }
+    lcd.cls();
+    if( (sakuraio.getConnectionStatus() & 0x80) == 0x80 ) {
+        lcd.printf("Online\n", i);
+    } else {
+        lcd.printf("Offline\n", i);
+    }
+    lcd.printf("%d", i);
+    i++;
+    led_1 = !led_1;
+    led_4 = !sw_4;
+    
+    enqueue_sensor_data(i);
+    sakuraio.send();
+}
+
+
+int main()
+{
+    setup();
+    while(1) {
+        loop();
+    }
+}
\ No newline at end of file