Example code of sakura.io Evaluation board.
Dependencies: AQM0802A BME280 MPU9250_SPI SakuraIO gps mbed
SakuraIo Evaluation Board Standard
Overview
This program is example code of sakura.io Evaluation board.
Functions
- Periodic measure from onboard sensors(period is 200ms)
- Motion sensor(gyro, accelometer, magnetometer)
- Environment sensor(temperatur, humidity, airpressur)
- GPS(longitude, latitude, timestamp)
- Periodic send the measuring datas to sakura.io platform(period is 300sec)
- Output the measured datas output to USB-Serial port
- baudrate is 9600bps
- Can select on / off of periodic running with switch `SW5`
Description
See the Getting Started page.
main.cpp
- Committer:
- misodengaku
- Date:
- 2017-09-07
- Revision:
- 0:db3ec2781484
- Child:
- 1:faf04d99f302
File content as of revision 0:db3ec2781484:
#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();
}
}
SAKURA Internet