-
Notifications
You must be signed in to change notification settings - Fork 0
/
Teensy32_CAN-Bus_BME280_temperature_and_humidity.ino
86 lines (67 loc) · 1.95 KB
/
Teensy32_CAN-Bus_BME280_temperature_and_humidity.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/* Temperature and humitidy measurement using the BME280 sensor. Data transmitted over CAN-Bus
*
* www.skpang.co.uk
*
* 1.0 Aug 2018
* For use with Teensy CAN-Bus Breakout board:
* http://skpang.co.uk/catalog/teensy-canbus-breakout-board-include-teensy-32-p-1507.html
*
* and BME280 breakout:
* http://skpang.co.uk/catalog/adafruit-bmp280-i2c-or-spi-barometric-pressure-altitude-sensor-p-1454.html
*
* Require BME280 library from:
* https://github.com/bolderflight/BME280
*/
#include <FlexCAN.h>
#include "BME280.h"
static CAN_message_t msg;
BME280 bme(Wire,0x77);
uint16_t CAN_ID = 0x700; // CAN-Bus ID
float temp;
uint8_t bytes[sizeof(float)];
void setup() {
Can0.begin(500000); //Set CAN speed to 500kbps
delay(1000);
Serial.println(F("BME280 CAN Bus Tx test"));
if (bme.begin() < 0) {
Serial.println("Error communicating with sensor, check wiring and I2C address");
while(1){}
}
}
void loop() {
bme.readSensor(); //Read the sensor
Serial.print(bme.getPressure_Pa(),6);
Serial.print("\t");
temp = bme.getTemperature_C();
memcpy(bytes, &temp, sizeof (temp)); //Convert the temperature in float into 4 bytes
Serial.print(temp,2);
Serial.print("\t");
msg.len = 8;
msg.id = CAN_ID;
msg.buf[0] = bytes[0];
msg.buf[1] = bytes[1];
msg.buf[2] = bytes[2];
msg.buf[3] = bytes[3];
msg.buf[4] = 0;
msg.buf[5] = 0;
msg.buf[6] = 0;
msg.buf[7] = 0;
Can0.write(msg); //Transmit the CAN data out
temp = bme.getHumidity_RH();
memcpy(bytes, &temp, sizeof (temp)); //Convert the humidity in float into 4 bytes
Serial.print(temp,2);
Serial.print("\t");
msg.len = 8;
msg.id = CAN_ID +1;
msg.buf[0] = bytes[0];
msg.buf[1] = bytes[1];
msg.buf[2] = bytes[2];
msg.buf[3] = bytes[3];
msg.buf[4] = 0;
msg.buf[5] = 0;
msg.buf[6] = 0;
msg.buf[7] = 0;
Can0.write(msg); //Transmit the CAN data out
Serial.println(" ");
delay(1000);
}