Merge pull request #331 from alanbjohnston/beta-mqtt
Adding Adafruit IO mqtt for payload sensorsbeta-usb
commit
ce9fc5cb8d
@ -0,0 +1,683 @@
|
|||||||
|
// code for Pico or Pro Micro or STM32 on the CubeSat Simulator STEM Payload board
|
||||||
|
// works wih CubeSatSim software v1.3.2 or later
|
||||||
|
// extra sensors can be added in payload_extension.cpp file
|
||||||
|
|
||||||
|
#include <Wire.h>
|
||||||
|
#include <Adafruit_Sensor.h>
|
||||||
|
#include <Adafruit_BME280.h>
|
||||||
|
#include <MPU6050_tockn.h>
|
||||||
|
#if !defined(ARDUINO_ARCH_MBED_RP2040) // && defined(ARDUINO_ARCH_RP2040)
|
||||||
|
#include <EEPROM.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040) // if Arduino Mbed OS RP2040 Boards is used in Arduino IDE
|
||||||
|
#include <TinyGPS++.h>
|
||||||
|
TinyGPSPlus gps;
|
||||||
|
UART Serial2(8, 9, 0, 0);
|
||||||
|
|
||||||
|
#elif !defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040) // if Raspberry Pi RP2040 Boards in Arduino IDE
|
||||||
|
#include <TinyGPS++.h>
|
||||||
|
TinyGPSPlus gps;
|
||||||
|
bool check_for_wifi();
|
||||||
|
bool wifi = false;
|
||||||
|
int led_builtin_pin;
|
||||||
|
float tlm[20];
|
||||||
|
|
||||||
|
#else // if Sparkfun Pro Micro or STM32
|
||||||
|
#include <EEPROM.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define SEALEVELPRESSURE_HPA (1013.25)
|
||||||
|
|
||||||
|
Adafruit_BME280 bme;
|
||||||
|
MPU6050 mpu6050(Wire);
|
||||||
|
|
||||||
|
long timer = 0;
|
||||||
|
int bmePresent;
|
||||||
|
int RXLED = 17; // The RX LED has a defined Arduino pin
|
||||||
|
int greenLED = 9;
|
||||||
|
int blueLED = 8;
|
||||||
|
int Sensor1 = 0;
|
||||||
|
float Sensor2 = 0;
|
||||||
|
float temp;
|
||||||
|
int calibration = 0;
|
||||||
|
|
||||||
|
void ee_prom_word_write(int addr, int val);
|
||||||
|
short ee_prom_word_read(int addr);
|
||||||
|
int first_time = true;
|
||||||
|
int first_read = true;
|
||||||
|
|
||||||
|
#if defined (ARDUINO_ARCH_MBED_RP2040) || (ARDUINO_ARCH_RP2040)
|
||||||
|
float T2 = 24; // Temperature data point 1
|
||||||
|
float R2 = 169; // Reading data point 1
|
||||||
|
float T1 = 6; // Temperature data point 2
|
||||||
|
float R1 = 181; // Reading data point 2
|
||||||
|
#endif
|
||||||
|
#if defined __AVR_ATmega32U4__
|
||||||
|
float T2 = 26.3; // Temperature data point 1
|
||||||
|
float R2 = 167; // Reading data point 1
|
||||||
|
float T1 = 2; // Temperature data point 2
|
||||||
|
float R1 = 179; // Reading data point 2
|
||||||
|
#endif
|
||||||
|
#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4)
|
||||||
|
float T2 = 25; // Temperature data point 1
|
||||||
|
float R2 = 671; // Reading data point 1
|
||||||
|
float T1 = 15.5; // Temperature data point 2
|
||||||
|
float R1 = 695; // Reading data point 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int sensorValue;
|
||||||
|
float Temp;
|
||||||
|
float rest;
|
||||||
|
|
||||||
|
char sensor_end_flag[] = "_END_FLAG_";
|
||||||
|
char sensor_start_flag[] = "_START_FLAG_";
|
||||||
|
bool show_gps = true; // set to false to not see all messages
|
||||||
|
float flon = 0.0, flat = 0.0, flalt = 0.0;
|
||||||
|
void get_gps();
|
||||||
|
|
||||||
|
extern void payload_setup(); // sensor extension setup function defined in payload_extension.cpp
|
||||||
|
extern void payload_loop(); // sensor extension read function defined in payload_extension.cpp
|
||||||
|
|
||||||
|
extern void aio_setup(); // Adafruit IO setup code defined in adafruitio_00_publish.cpp
|
||||||
|
extern void aio_loop(float telem[]); // Adafruit IO loop code defined in adafruitio_00_publish.cpp
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
|
||||||
|
Serial.begin(115200); // Serial Monitor for testing
|
||||||
|
|
||||||
|
#if !defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040)
|
||||||
|
Serial1.setRX(1);
|
||||||
|
delay(100);
|
||||||
|
Serial1.setTX(0);
|
||||||
|
delay(100);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Serial1.begin(115200); // for communication with Pi Zero
|
||||||
|
|
||||||
|
#if !defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040) // if Raspberry Pi RP2040 Boards in Arduino IDE
|
||||||
|
EEPROM.begin(512);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
delay(2000);
|
||||||
|
|
||||||
|
#if defined (ARDUINO_ARCH_MBED_RP2040) && (ARDUINO_ARCH_RP2040)
|
||||||
|
Serial.println("Pico with Mbed");
|
||||||
|
#elif !defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040)
|
||||||
|
Serial.println("Pico with RP2040");
|
||||||
|
#elif defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4)
|
||||||
|
Serial.println("STM32");
|
||||||
|
#elif defined __AVR_ATmega32U4__
|
||||||
|
Serial.println("Pro Micro");
|
||||||
|
#else
|
||||||
|
Serial.println("Unknown board");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Serial.println("Starting!");
|
||||||
|
|
||||||
|
#if defined (ARDUINO_ARCH_MBED_RP2040) || (ARDUINO_ARCH_RP2040)
|
||||||
|
Serial.println("Starting Serial2 for optional GPS on JP12");
|
||||||
|
// Serial2.begin(9600); // serial from - some modules need 115200
|
||||||
|
Serial2.begin(9600); // serial from GPS or other serial sensor. Some GPS need 115200
|
||||||
|
|
||||||
|
// set all Pico GPIO connected pins to input
|
||||||
|
for (int i = 10; i < 22; i++) {
|
||||||
|
pinMode(i, INPUT);
|
||||||
|
}
|
||||||
|
pinMode(26, INPUT);
|
||||||
|
pinMode(27, INPUT);
|
||||||
|
pinMode(28, INPUT);
|
||||||
|
pinMode(15, INPUT_PULLUP); // squelch
|
||||||
|
#endif
|
||||||
|
|
||||||
|
blink_setup();
|
||||||
|
|
||||||
|
blink(500);
|
||||||
|
delay(250);
|
||||||
|
blink(500);
|
||||||
|
delay(250);
|
||||||
|
led_set(greenLED, HIGH);
|
||||||
|
delay(250);
|
||||||
|
led_set(greenLED, LOW);
|
||||||
|
led_set(blueLED, HIGH);
|
||||||
|
delay(250);
|
||||||
|
led_set(blueLED, LOW);
|
||||||
|
|
||||||
|
if (bme.begin(0x76)) {
|
||||||
|
bmePresent = 1;
|
||||||
|
} else {
|
||||||
|
Serial.println("Could not find a valid BME280 sensor, check wiring!");
|
||||||
|
bmePresent = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
mpu6050.begin();
|
||||||
|
|
||||||
|
if (eeprom_word_read(0) == 0xA07)
|
||||||
|
{
|
||||||
|
Serial.println("Reading gyro offsets from EEPROM\n");
|
||||||
|
|
||||||
|
float xOffset = ((float)eeprom_word_read(1)) / 100.0;
|
||||||
|
float yOffset = ((float)eeprom_word_read(2)) / 100.0;
|
||||||
|
float zOffset = ((float)eeprom_word_read(3)) / 100.0;
|
||||||
|
|
||||||
|
Serial.println(xOffset, DEC);
|
||||||
|
Serial.println(yOffset, DEC);
|
||||||
|
Serial.println(zOffset, DEC);
|
||||||
|
|
||||||
|
mpu6050.setGyroOffsets(xOffset, yOffset, zOffset);
|
||||||
|
|
||||||
|
Serial.println("\nTemperature calibration data from EEPROM\n");
|
||||||
|
|
||||||
|
T1 = ((float)eeprom_word_read(4)) / 10.0;
|
||||||
|
R1 = ((float)eeprom_word_read(5));
|
||||||
|
T2 = ((float)eeprom_word_read(6)) / 10.0;
|
||||||
|
R2 = ((float)eeprom_word_read(7));
|
||||||
|
|
||||||
|
Serial.println(T1, DEC);
|
||||||
|
Serial.println(R1, DEC);
|
||||||
|
Serial.println(" ");
|
||||||
|
Serial.println(T2, DEC);
|
||||||
|
Serial.println(R2, DEC);
|
||||||
|
Serial.println(" ");
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Serial.println("Calculating gyro offsets\n");
|
||||||
|
mpu6050.calcGyroOffsets(true);
|
||||||
|
|
||||||
|
#if !defined(ARDUINO_ARCH_MBED_RP2040) // && defined(ARDUINO_ARCH_RP2040) // if Raspberry Pi RP2040 Boards is used in Arduino IDE
|
||||||
|
Serial.println("Storing gyro offsets in EEPROM\n");
|
||||||
|
|
||||||
|
eeprom_word_write(0, 0xA07);
|
||||||
|
eeprom_word_write(1, (int)(mpu6050.getGyroXoffset() * 100.0) + 0.5);
|
||||||
|
eeprom_word_write(2, (int)(mpu6050.getGyroYoffset() * 100.0) + 0.5);
|
||||||
|
eeprom_word_write(3, (int)(mpu6050.getGyroZoffset() * 100.0) + 0.5);
|
||||||
|
|
||||||
|
Serial.println(eeprom_word_read(0), HEX);
|
||||||
|
Serial.println(((float)eeprom_word_read(1)) / 100.0, DEC);
|
||||||
|
Serial.println(((float)eeprom_word_read(2)) / 100.0, DEC);
|
||||||
|
Serial.println(((float)eeprom_word_read(3)) / 100.0, DEC);
|
||||||
|
|
||||||
|
Serial.println("\nStoring temperature calibration data in EEPROM\n");
|
||||||
|
|
||||||
|
eeprom_word_write(4, (int)(T1 * 10.0) + 0.5);
|
||||||
|
eeprom_word_write(5, (int) R1);
|
||||||
|
eeprom_word_write(6, (int)(T2 * 10.0) + 0.5);
|
||||||
|
eeprom_word_write(7, (int) R2);
|
||||||
|
|
||||||
|
T1 = ((float)eeprom_word_read(4)) / 10.0;
|
||||||
|
R1 = ((float)eeprom_word_read(5));
|
||||||
|
T2 = ((float)eeprom_word_read(6)) / 10.0;
|
||||||
|
R2 = ((float)eeprom_word_read(7));
|
||||||
|
|
||||||
|
Serial.println(T1, DEC);
|
||||||
|
Serial.println(R1, DEC);
|
||||||
|
Serial.println(" ");
|
||||||
|
Serial.println(T2, DEC);
|
||||||
|
Serial.println(R2, DEC);
|
||||||
|
Serial.println(" ");
|
||||||
|
|
||||||
|
#if !defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040) // if Raspberry Pi RP2040 Boards is used in Arduino IDE
|
||||||
|
if (EEPROM.commit()) {
|
||||||
|
Serial.println("EEPROM successfully committed\n");
|
||||||
|
} else {
|
||||||
|
Serial.println("ERROR! EEPROM commit failed\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
payload_setup(); // sensor extension setup function defined in payload_extension.cpp
|
||||||
|
aio_setup(); // Adafruit IO setup code defined in adafruitio_00_publish.cpp
|
||||||
|
|
||||||
|
for (int i = 0; i++; i < 20)
|
||||||
|
tlm[i] = 0.0;
|
||||||
|
// tlm[0] = 23.1; // uncomment for non-zero test values if no BME or MPU sensor is attached.
|
||||||
|
// tlm[1] = 1000.2;
|
||||||
|
// tlm[2] = 122;
|
||||||
|
// tlm[3] = 56.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
|
||||||
|
blink(50);
|
||||||
|
|
||||||
|
if (Serial1.available() > 0) {
|
||||||
|
Serial.print("Received serial data!!!\n");
|
||||||
|
delay(10);
|
||||||
|
while (Serial1.available() > 0) {
|
||||||
|
char result = Serial1.read();
|
||||||
|
Serial.print(result);
|
||||||
|
}
|
||||||
|
Serial.println(" ");
|
||||||
|
}
|
||||||
|
{
|
||||||
|
// if (result == '?')
|
||||||
|
{
|
||||||
|
if (bmePresent) {
|
||||||
|
|
||||||
|
tlm[0] = bme.readTemperature();
|
||||||
|
tlm[1] = bme.readPressure() / 100.0F;
|
||||||
|
tlm[2] = bme.readAltitude(SEALEVELPRESSURE_HPA);
|
||||||
|
tlm[3] = bme.readHumidity();
|
||||||
|
|
||||||
|
Serial1.print(sensor_start_flag);
|
||||||
|
Serial1.print("OK BME280 ");
|
||||||
|
Serial1.print(tlm[0]);
|
||||||
|
Serial1.print(" ");
|
||||||
|
Serial1.print(tlm[1]);
|
||||||
|
Serial1.print(" ");
|
||||||
|
Serial1.print(tlm[2]);
|
||||||
|
Serial1.print(" ");
|
||||||
|
Serial1.print(tlm[3]);
|
||||||
|
|
||||||
|
Serial.print("OK BME280 ");
|
||||||
|
Serial.print(tlm[0]);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(tlm[1]);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(tlm[2]);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(tlm[3]);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
Serial1.print(sensor_start_flag);
|
||||||
|
Serial1.print("OK BME280 0.0 0.0 0.0 0.0");
|
||||||
|
|
||||||
|
Serial.print("OK BME280 0.0 0.0 0.0 0.0");
|
||||||
|
}
|
||||||
|
mpu6050.update();
|
||||||
|
|
||||||
|
tlm[4] = mpu6050.getGyroX();
|
||||||
|
tlm[5] = mpu6050.getGyroY();
|
||||||
|
tlm[6] = mpu6050.getGyroZ();
|
||||||
|
tlm[7] = mpu6050.getAccX();
|
||||||
|
tlm[8] = mpu6050.getAccY();
|
||||||
|
tlm[9] = mpu6050.getAccZ();
|
||||||
|
|
||||||
|
Serial1.print(" MPU6050 ");
|
||||||
|
Serial1.print(tlm[4]);
|
||||||
|
Serial1.print(" ");
|
||||||
|
Serial1.print(tlm[5]);
|
||||||
|
Serial1.print(" ");
|
||||||
|
Serial1.print(tlm[6]);
|
||||||
|
|
||||||
|
Serial1.print(" ");
|
||||||
|
Serial1.print(tlm[7]);
|
||||||
|
Serial1.print(" ");
|
||||||
|
Serial1.print(tlm[8]);
|
||||||
|
Serial1.print(" ");
|
||||||
|
Serial1.print(tlm[9]);
|
||||||
|
|
||||||
|
Serial.print(" MPU6050 ");
|
||||||
|
Serial.print(tlm[4]);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(tlm[5]);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(tlm[6]);
|
||||||
|
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(tlm[7]);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(tlm[8]);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(tlm[9]);
|
||||||
|
|
||||||
|
sensorValue = read_analog();
|
||||||
|
|
||||||
|
// Serial.println(sensorValue);
|
||||||
|
Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1));
|
||||||
|
|
||||||
|
// Serial1.print(" GPS 0 0 0 TMP ");
|
||||||
|
|
||||||
|
Serial1.print(" GPS ");
|
||||||
|
Serial1.print(flat,4);
|
||||||
|
Serial1.print(" ");
|
||||||
|
Serial1.print(flon,4);
|
||||||
|
Serial1.print(" ");
|
||||||
|
Serial1.print(flalt,2);
|
||||||
|
|
||||||
|
Serial1.print(" TMP ");
|
||||||
|
Serial1.print(Temp);
|
||||||
|
|
||||||
|
// Serial1.print(" ");
|
||||||
|
// Serial1.println(Sensor2);
|
||||||
|
|
||||||
|
Serial.print(" GPS ");
|
||||||
|
Serial.print(flat,4);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(flon,4);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(flalt,2);
|
||||||
|
|
||||||
|
// Serial.print(" GPS 0 0 0 TMP ");
|
||||||
|
Serial.print(" TMP ");
|
||||||
|
Serial.print(Temp);
|
||||||
|
// Serial.print(" ");
|
||||||
|
// Serial.println(Sensor2);
|
||||||
|
|
||||||
|
float rotation = sqrt(tlm[4]*tlm[4] + tlm[5]*tlm[5] + tlm[6]*tlm[6]);
|
||||||
|
float acceleration = sqrt(tlm[7]*tlm[7] + tlm[8]*tlm[8] + tlm[9]*tlm[9]);
|
||||||
|
// Serial.print(rotation);
|
||||||
|
// Serial.print(" ");
|
||||||
|
// Serial.println(acceleration);
|
||||||
|
|
||||||
|
if (first_read == true) {
|
||||||
|
first_read = false;
|
||||||
|
rest = acceleration;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (acceleration > 1.2 * rest)
|
||||||
|
led_set(greenLED, HIGH);
|
||||||
|
else
|
||||||
|
led_set(greenLED, LOW);
|
||||||
|
|
||||||
|
if (rotation > 5)
|
||||||
|
led_set(blueLED, HIGH);
|
||||||
|
else
|
||||||
|
led_set(blueLED, LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
payload_loop(); // sensor extension read function defined in payload_extension.cpp
|
||||||
|
aio_loop(tlm); // Adafruit IO loop code defined in adafruitio_00_publish.cpp
|
||||||
|
|
||||||
|
// Serial1.println(" ");
|
||||||
|
Serial1.println(sensor_end_flag);
|
||||||
|
Serial.println(" ");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Serial.available() > 0) {
|
||||||
|
blink(50);
|
||||||
|
char result = Serial.read();
|
||||||
|
// Serial.println(result);
|
||||||
|
// Serial.println("OK");
|
||||||
|
// Serial.println(counter++);
|
||||||
|
//#if !defined (ARDUINO_ARCH_RP2040)
|
||||||
|
if (result == 'R' || result == 'r') {
|
||||||
|
// Serial1.println("OK");
|
||||||
|
// delay(100);
|
||||||
|
Serial.println("Resetting\n");
|
||||||
|
first_read = true;
|
||||||
|
setup();
|
||||||
|
}
|
||||||
|
else if (result == 'D' || result == 'd') {
|
||||||
|
Serial.println("\nCurrent temperature calibration data\n");
|
||||||
|
Serial.println(T1, DEC);
|
||||||
|
Serial.println(R1, DEC);
|
||||||
|
Serial.println(" ");
|
||||||
|
Serial.println(T2, DEC);
|
||||||
|
Serial.println(R2, DEC);
|
||||||
|
|
||||||
|
Serial.println("\nCurrent raw temperature reading\n");
|
||||||
|
Serial.println(sensorValue, DEC);
|
||||||
|
Serial.println(" ");
|
||||||
|
}
|
||||||
|
else if (result == 'C' || result == 'c') {
|
||||||
|
Serial.println("\nClearing stored gyro offsets in EEPROM\n");
|
||||||
|
eeprom_word_write(0, 0x00);
|
||||||
|
#if !defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040) // if Raspberry Pi RP2040 Boards is used in Arduino IDE
|
||||||
|
|
||||||
|
if (EEPROM.commit()) {
|
||||||
|
Serial.println("EEPROM successfully committed\n");
|
||||||
|
} else {
|
||||||
|
Serial.println("ERROR! EEPROM commit failed\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
first_time = true;
|
||||||
|
setup();
|
||||||
|
}
|
||||||
|
else if (result == 'S' || result == 's') {
|
||||||
|
Serial.print("\nStoring temperature calibration data point "); // in EEPROM\n");
|
||||||
|
Serial.print(calibration + 1);
|
||||||
|
Serial.print(" in EEPROM\n");
|
||||||
|
|
||||||
|
Serial.println(temp);
|
||||||
|
Serial.println(sensorValue);
|
||||||
|
Serial.println(" ");
|
||||||
|
|
||||||
|
eeprom_word_write(calibration * 2 + 4 , (int)(temp * 10.0) + 0.5);
|
||||||
|
eeprom_word_write(calibration * 2 + 5, sensorValue);
|
||||||
|
|
||||||
|
if (calibration == 0) {
|
||||||
|
T1 = temp;
|
||||||
|
R1 = sensorValue;
|
||||||
|
calibration = 1;
|
||||||
|
} else {
|
||||||
|
T2 = temp;
|
||||||
|
R2 = sensorValue;
|
||||||
|
calibration = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// calibration = (calibration + 1) % 2;
|
||||||
|
// Serial.println(calibration + 1);
|
||||||
|
|
||||||
|
#if !defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040) // if Raspberry Pi RP2040 Boards is used in Arduino IDE
|
||||||
|
|
||||||
|
if (EEPROM.commit()) {
|
||||||
|
Serial.println("EEPROM successfully committed\n");
|
||||||
|
} else {
|
||||||
|
Serial.println("ERROR! EEPROM commit failed\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
//#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined (ARDUINO_ARCH_MBED_RP2040) || (ARDUINO_ARCH_RP2040)
|
||||||
|
Serial.print("Squelch: ");
|
||||||
|
Serial.println(digitalRead(15));
|
||||||
|
|
||||||
|
get_gps();
|
||||||
|
#else
|
||||||
|
delay(1000); // not needed due to gps 1 second polling delay
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void eeprom_word_write(int addr, int val)
|
||||||
|
{
|
||||||
|
#if !defined(ARDUINO_ARCH_MBED_RP2040) // && defined(ARDUINO_ARCH_RP2040) // if Raspberry Pi RP2040 Boards is used in Arduino IDE
|
||||||
|
EEPROM.write(addr * 2, lowByte(val));
|
||||||
|
EEPROM.write(addr * 2 + 1, highByte(val));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
short eeprom_word_read(int addr)
|
||||||
|
{
|
||||||
|
int result = 0;
|
||||||
|
#if !defined(ARDUINO_ARCH_MBED_RP2040) // && defined(ARDUINO_ARCH_RP2040) // if Raspberry Pi RP2040 Boards is used in Arduino IDE
|
||||||
|
result = ((EEPROM.read(addr * 2 + 1) << 8) | EEPROM.read(addr * 2));
|
||||||
|
#endif
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void blink_setup()
|
||||||
|
{
|
||||||
|
#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4)
|
||||||
|
// initialize digital pin PB1 as an output.
|
||||||
|
pinMode(PC13, OUTPUT);
|
||||||
|
pinMode(PB9, OUTPUT);
|
||||||
|
pinMode(PB8, OUTPUT);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined __AVR_ATmega32U4__
|
||||||
|
pinMode(RXLED, OUTPUT); // Set RX LED as an output
|
||||||
|
// TX LED is set as an output behind the scenes
|
||||||
|
pinMode(greenLED, OUTPUT);
|
||||||
|
pinMode(blueLED,OUTPUT);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040)
|
||||||
|
pinMode(LED_BUILTIN, OUTPUT);
|
||||||
|
pinMode(18, OUTPUT); // blue LED on STEM Payload Board v1.3.2
|
||||||
|
pinMode(19, OUTPUT); // green LED on STEM Payload Board v1.3.2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040)
|
||||||
|
if (check_for_wifi()) {
|
||||||
|
wifi = true;
|
||||||
|
led_builtin_pin = LED_BUILTIN; // use default GPIO for Pico W
|
||||||
|
pinMode(LED_BUILTIN, OUTPUT);
|
||||||
|
// configure_wifi();
|
||||||
|
} else {
|
||||||
|
led_builtin_pin = 25; // manually set GPIO 25 for Pico board
|
||||||
|
// pinMode(25, OUTPUT);
|
||||||
|
pinMode(led_builtin_pin, OUTPUT);
|
||||||
|
}
|
||||||
|
pinMode(18, OUTPUT);
|
||||||
|
pinMode(19, OUTPUT);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void blink(int length)
|
||||||
|
{
|
||||||
|
#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4)
|
||||||
|
digitalWrite(PC13, LOW); // turn the LED on (HIGH is the voltage level)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined __AVR_ATmega32U4__
|
||||||
|
digitalWrite(RXLED, LOW); // set the RX LED ON
|
||||||
|
TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040)
|
||||||
|
digitalWrite(LED_BUILTIN, HIGH); // set the built-in LED ON
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040)
|
||||||
|
if (wifi)
|
||||||
|
digitalWrite(LED_BUILTIN, HIGH); // set the built-in LED ON
|
||||||
|
else
|
||||||
|
digitalWrite(led_builtin_pin, HIGH); // set the built-in LED ON
|
||||||
|
#endif
|
||||||
|
|
||||||
|
delay(length);
|
||||||
|
|
||||||
|
#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4)
|
||||||
|
digitalWrite(PC13, HIGH); // turn the LED off by making the voltage LOW
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined __AVR_ATmega32U4__
|
||||||
|
digitalWrite(RXLED, HIGH); // set the RX LED OFF
|
||||||
|
TXLED0; //TX LED macro to turn LED ON
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040)
|
||||||
|
digitalWrite(LED_BUILTIN, LOW); // set the built-in LED OFF
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040)
|
||||||
|
if (wifi)
|
||||||
|
digitalWrite(LED_BUILTIN, LOW); // set the built-in LED ON
|
||||||
|
else
|
||||||
|
digitalWrite(led_builtin_pin, LOW); // set the built-in LED ON
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_set(int ledPin, bool state)
|
||||||
|
{
|
||||||
|
#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4)
|
||||||
|
if (ledPin == greenLED)
|
||||||
|
digitalWrite(PB9, state);
|
||||||
|
else if (ledPin == blueLED)
|
||||||
|
digitalWrite(PB8, state);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined __AVR_ATmega32U4__
|
||||||
|
digitalWrite(ledPin, state);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (ARDUINO_ARCH_MBED_RP2040) || (ARDUINO_ARCH_RP2040)
|
||||||
|
if (ledPin == greenLED)
|
||||||
|
digitalWrite(19, state);
|
||||||
|
else if (ledPin == blueLED)
|
||||||
|
digitalWrite(18, state);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
int read_analog()
|
||||||
|
{
|
||||||
|
int sensorValue;
|
||||||
|
#if defined __AVR_ATmega32U4__
|
||||||
|
sensorValue = analogRead(A3);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4)
|
||||||
|
sensorValue = analogRead(PA7);
|
||||||
|
#endif
|
||||||
|
#if defined (ARDUINO_ARCH_MBED_RP2040) || (ARDUINO_ARCH_RP2040)
|
||||||
|
sensorValue = analogRead(28);
|
||||||
|
#endif
|
||||||
|
return(sensorValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !defined(ARDUINO_ARCH_MBED_RP2040) && defined(ARDUINO_ARCH_RP2040)
|
||||||
|
bool check_for_wifi() {
|
||||||
|
|
||||||
|
pinMode(29, INPUT);
|
||||||
|
const float conversion_factor = 3.3f / (1 << 12);
|
||||||
|
uint16_t result = analogRead(29);
|
||||||
|
// Serial.printf("ADC3 value: 0x%03x, voltage: %f V\n", result, result * conversion_factor);
|
||||||
|
|
||||||
|
if (result < 0x10) {
|
||||||
|
Serial.println("\nPico W detected!\n");
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Serial.println("\nPico detected!\n");
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (ARDUINO_ARCH_MBED_RP2040) || (ARDUINO_ARCH_RP2040)
|
||||||
|
void get_gps() {
|
||||||
|
// Serial.println("Getting GPS data");
|
||||||
|
bool newData = false;
|
||||||
|
unsigned long start = millis();
|
||||||
|
|
||||||
|
// for (unsigned long start = millis(); millis() - start < 1000;) // 5000;)
|
||||||
|
while ((millis() - start) < 1000) // 5000;)
|
||||||
|
{
|
||||||
|
while (Serial2.available())
|
||||||
|
{
|
||||||
|
char c = Serial2.read();
|
||||||
|
if (show_gps)
|
||||||
|
Serial.write(c); // uncomment this line if you want to see the GPS data flowing
|
||||||
|
if (gps.encode(c)) // Did a new valid sentence come in?
|
||||||
|
newData = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (newData) {
|
||||||
|
Serial.print("GPS read new data in ms: ");
|
||||||
|
Serial.println(millis() - start);
|
||||||
|
|
||||||
|
// float flon = 0.0, flat = 0.0, flalt = 0.0;
|
||||||
|
// unsigned long age;
|
||||||
|
// starting = millis();
|
||||||
|
// gps.f_get_position(&flat, &flon, &age);
|
||||||
|
|
||||||
|
Serial.print(F("Location: "));
|
||||||
|
if (gps.location.isValid())
|
||||||
|
{
|
||||||
|
Serial.print(gps.location.lat(), 6);
|
||||||
|
Serial.print(F(","));
|
||||||
|
Serial.print(gps.location.lng(), 6);
|
||||||
|
|
||||||
|
flat = gps.location.lat();
|
||||||
|
flon = gps.location.lng();
|
||||||
|
flalt = gps.altitude.meters();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Serial.print(F("INVALID"));
|
||||||
|
}
|
||||||
|
Serial.print("\r\n");
|
||||||
|
|
||||||
|
} else
|
||||||
|
// Serial.printf("GPS read no new data: %d\n", millis() - start);
|
||||||
|
;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@ -0,0 +1,142 @@
|
|||||||
|
// Mods to this file by Alan B Johnston KU2Y
|
||||||
|
//
|
||||||
|
// changed setup to aio_setup and loop to aio_loop
|
||||||
|
//
|
||||||
|
// You must put your account and WiFi info and rename config file as config.h
|
||||||
|
//
|
||||||
|
// Adafruit IO Publish Example
|
||||||
|
//
|
||||||
|
// Adafruit invests time and resources providing this open source code.
|
||||||
|
// Please support Adafruit and open source hardware by purchasing
|
||||||
|
// products from Adafruit!
|
||||||
|
//
|
||||||
|
// Written by Todd Treece for Adafruit Industries
|
||||||
|
// Copyright (c) 2016 Adafruit Industries
|
||||||
|
// Licensed under the MIT license.
|
||||||
|
//
|
||||||
|
// All text above must be included in any redistribution.
|
||||||
|
|
||||||
|
/************************** Configuration ***********************************/
|
||||||
|
|
||||||
|
// edit the config.h tab and enter your Adafruit IO credentials
|
||||||
|
// and any additional configuration needed for WiFi, cellular,
|
||||||
|
// or ethernet clients.
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
/************************ Example Starts Here *******************************/
|
||||||
|
|
||||||
|
// this int will hold the current count for our sketch
|
||||||
|
// int count = 0;
|
||||||
|
bool aio_connected = false;
|
||||||
|
unsigned long time_stamp;
|
||||||
|
|
||||||
|
// should match the number of feeds define below so throttling delay is set correctly
|
||||||
|
#define FEEDS 7
|
||||||
|
|
||||||
|
// set up the 'counter' feed
|
||||||
|
//AdafruitIO_Feed *counter = io.feed("counter");
|
||||||
|
AdafruitIO_Feed *temperature = io.feed("temperature");
|
||||||
|
AdafruitIO_Feed *pressure = io.feed("pressure");
|
||||||
|
AdafruitIO_Feed *altitude = io.feed("altitude");
|
||||||
|
AdafruitIO_Feed *humidity = io.feed("humidity");
|
||||||
|
AdafruitIO_Feed *accel_x = io.feed("Acceleration - X Axis");
|
||||||
|
AdafruitIO_Feed *accel_y = io.feed("Acceleration - Y Axis");
|
||||||
|
AdafruitIO_Feed *accel_z = io.feed("Acceleration - Z Axis");
|
||||||
|
// AdafruitIO_Feed *gyro_x = io.feed("Rotation X Axis");
|
||||||
|
// AdafruitIO_Feed *gyro_y = io.feed("Rotation Y Axis");
|
||||||
|
// AdafruitIO_Feed *gyro_z = io.feed("Rotation Z Axis");
|
||||||
|
|
||||||
|
void aio_setup() {
|
||||||
|
/*
|
||||||
|
// start the serial connection
|
||||||
|
Serial.begin(115200);
|
||||||
|
|
||||||
|
// wait for serial monitor to open
|
||||||
|
while(! Serial);
|
||||||
|
*/
|
||||||
|
Serial.print("\nConnecting to Adafruit IO");
|
||||||
|
|
||||||
|
// connect to io.adafruit.com
|
||||||
|
io.connect();
|
||||||
|
|
||||||
|
/* // wait for a connection
|
||||||
|
while(io.status() < AIO_CONNECTED) {
|
||||||
|
Serial.print(".");
|
||||||
|
delay(500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// we are connected
|
||||||
|
Serial.println();
|
||||||
|
Serial.println(io.statusText());
|
||||||
|
*/
|
||||||
|
time_stamp = millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
void aio_loop(float tlm[]) {
|
||||||
|
|
||||||
|
if (!aio_connected) {
|
||||||
|
if (io.status() < AIO_CONNECTED) {
|
||||||
|
Serial.println("\nConnecting to Adafruit IO...");
|
||||||
|
} else {
|
||||||
|
Serial.print("\nSuccessfully connected to Adafruit IO! Status: ");
|
||||||
|
// Serial.println();
|
||||||
|
Serial.println(io.statusText());
|
||||||
|
aio_connected = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// io.run(); is required for all sketches.
|
||||||
|
// it should always be present at the top of your loop
|
||||||
|
// function. it keeps the client connected to
|
||||||
|
// io.adafruit.com, and processes any incoming data.
|
||||||
|
io.run();
|
||||||
|
|
||||||
|
if ((millis() - time_stamp) < ((2000 * (FEEDS+1)) + 1000)) { // 8000) { // Only send if 8 seconds have passed
|
||||||
|
Serial.print("\nWaiting to send Adafruit IO\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
time_stamp = millis();
|
||||||
|
// save count to the 'counter' feed on Adafruit IO
|
||||||
|
Serial.print("\nSending to Adafruit IO -> ");
|
||||||
|
// Serial.println(count);
|
||||||
|
// counter->save(count);
|
||||||
|
Serial.print(tlm[0]);
|
||||||
|
temperature->save(tlm[0]);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(tlm[1]);
|
||||||
|
pressure->save(tlm[1]);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(tlm[2]);
|
||||||
|
altitude->save(tlm[2]);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(tlm[3]);
|
||||||
|
humidity->save(tlm[3]);
|
||||||
|
Serial.print(" ");
|
||||||
|
// Serial.print(tlm[4]);
|
||||||
|
// gyro_x->save(tlm[4]);
|
||||||
|
// Serial.print(" ");
|
||||||
|
// Serial.print(tlm[5]);
|
||||||
|
// gyro_y->save(tlm[5]);
|
||||||
|
// Serial.print(" ");
|
||||||
|
// Serial.print(tlm[6]);
|
||||||
|
// gyro_z->save(tlm[6]);
|
||||||
|
Serial.print(tlm[7]);
|
||||||
|
accel_x->save(tlm[7]);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(tlm[8]);
|
||||||
|
accel_y->save(tlm[8]);
|
||||||
|
Serial.print(" ");
|
||||||
|
Serial.print(tlm[9]);
|
||||||
|
accel_z->save(tlm[9]);
|
||||||
|
|
||||||
|
Serial.println(" ");
|
||||||
|
|
||||||
|
// increment the count by 1
|
||||||
|
// count++;
|
||||||
|
|
||||||
|
// Adafruit IO is rate limited for publishing, so a delay is required in
|
||||||
|
// between feed->save events. In this example, we will wait three seconds
|
||||||
|
// (1000 milliseconds == 1 second) during each loop.
|
||||||
|
// delay(10000); // 1000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
// Edit this config file with your IO Username, Key, WiFi SSID and Password, then save as config.h
|
||||||
|
|
||||||
|
/************************ Adafruit IO Config *******************************/
|
||||||
|
|
||||||
|
// visit io.adafruit.com if you need to create an account,
|
||||||
|
// or if you need your Adafruit IO key.
|
||||||
|
#define IO_USERNAME "your_username"
|
||||||
|
#define IO_KEY "your_key"
|
||||||
|
|
||||||
|
/******************************* WIFI **************************************/
|
||||||
|
|
||||||
|
// the AdafruitIO_WiFi client will work with the following boards:
|
||||||
|
// - HUZZAH ESP8266 Breakout -> https://www.adafruit.com/products/2471
|
||||||
|
// - Feather HUZZAH ESP8266 -> https://www.adafruit.com/products/2821
|
||||||
|
// - Feather HUZZAH ESP32 -> https://www.adafruit.com/product/3405
|
||||||
|
// - Feather M0 WiFi -> https://www.adafruit.com/products/3010
|
||||||
|
// - Feather WICED -> https://www.adafruit.com/products/3056
|
||||||
|
// - Adafruit PyPortal -> https://www.adafruit.com/product/4116
|
||||||
|
// - Adafruit Metro M4 Express AirLift Lite ->
|
||||||
|
// https://www.adafruit.com/product/4000
|
||||||
|
// - Adafruit AirLift Breakout -> https://www.adafruit.com/product/4201
|
||||||
|
// - Adafruit AirLift Shield -> https://www.adafruit.com/product/4285
|
||||||
|
// - Adafruit AirLift FeatherWing -> https://www.adafruit.com/product/4264
|
||||||
|
|
||||||
|
#define WIFI_SSID "your_ssid"
|
||||||
|
#define WIFI_PASS "your_pass"
|
||||||
|
|
||||||
|
// uncomment the following line if you are using airlift
|
||||||
|
// #define USE_AIRLIFT
|
||||||
|
|
||||||
|
// uncomment the following line if you are using winc1500
|
||||||
|
// #define USE_WINC1500
|
||||||
|
|
||||||
|
// uncomment the following line if you are using mrk1010 or nano 33 iot
|
||||||
|
//#define ARDUINO_SAMD_MKR1010
|
||||||
|
|
||||||
|
// comment out the following lines if you are using fona or ethernet
|
||||||
|
#include "AdafruitIO_WiFi.h"
|
||||||
|
|
||||||
|
#if defined(USE_AIRLIFT) || defined(ADAFRUIT_METRO_M4_AIRLIFT_LITE) || \
|
||||||
|
defined(ADAFRUIT_PYPORTAL)
|
||||||
|
// Configure the pins used for the ESP32 connection
|
||||||
|
#if !defined(SPIWIFI_SS) // if the wifi definition isnt in the board variant
|
||||||
|
// Don't change the names of these #define's! they match the variant ones
|
||||||
|
#define SPIWIFI SPI
|
||||||
|
#define SPIWIFI_SS 10 // Chip select pin
|
||||||
|
#define NINA_ACK 9 // a.k.a BUSY or READY pin
|
||||||
|
#define NINA_RESETN 6 // Reset pin
|
||||||
|
#define NINA_GPIO0 -1 // Not connected
|
||||||
|
#endif
|
||||||
|
AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS, SPIWIFI_SS,
|
||||||
|
NINA_ACK, NINA_RESETN, NINA_GPIO0, &SPIWIFI);
|
||||||
|
#else
|
||||||
|
AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);
|
||||||
|
#endif
|
||||||
|
/******************************* FONA **************************************/
|
||||||
|
|
||||||
|
// the AdafruitIO_FONA client will work with the following boards:
|
||||||
|
// - Feather 32u4 FONA -> https://www.adafruit.com/product/3027
|
||||||
|
|
||||||
|
// uncomment the following two lines for 32u4 FONA,
|
||||||
|
// and comment out the AdafruitIO_WiFi client in the WIFI section
|
||||||
|
// #include "AdafruitIO_FONA.h"
|
||||||
|
// AdafruitIO_FONA io(IO_USERNAME, IO_KEY);
|
||||||
|
|
||||||
|
/**************************** ETHERNET ************************************/
|
||||||
|
|
||||||
|
// the AdafruitIO_Ethernet client will work with the following boards:
|
||||||
|
// - Ethernet FeatherWing -> https://www.adafruit.com/products/3201
|
||||||
|
|
||||||
|
// uncomment the following two lines for ethernet,
|
||||||
|
// and comment out the AdafruitIO_WiFi client in the WIFI section
|
||||||
|
// #include "AdafruitIO_Ethernet.h"
|
||||||
|
// AdafruitIO_Ethernet io(IO_USERNAME, IO_KEY);
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
// Use this template for adding additional sensors
|
||||||
|
// see Payload_BME280_MPU6050_XS_Extended for an example
|
||||||
|
|
||||||
|
// put your library includes here
|
||||||
|
#include "Arduino.h"
|
||||||
|
|
||||||
|
// put your globals here
|
||||||
|
|
||||||
|
// put your setup code here
|
||||||
|
void payload_setup() {
|
||||||
|
|
||||||
|
// Serial.println("Starting new sensor!");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// put your loop code here
|
||||||
|
// Very Important: only use print, not println!!
|
||||||
|
void payload_loop() {
|
||||||
|
|
||||||
|
/*
|
||||||
|
Serial1.print(" NEW 0.0"); // send sensor data over serial to Pi Zero
|
||||||
|
Serial.print(" NEW 0.0"); // send sensor data over serial monitor for testing
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in new issue