Compare commits
1
Commits
ollo-dev
...
ollo-can-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f66c0eee2b |
@@ -82,6 +82,9 @@
|
|||||||
#endif
|
#endif
|
||||||
#ifdef ANALOG_WATER
|
#ifdef ANALOG_WATER
|
||||||
#define SENSOR_TANK_ANALOG ANALOG_WATER /**< GPIO 34 - analog water sensor (GPIO_NUM_34) */
|
#define SENSOR_TANK_ANALOG ANALOG_WATER /**< GPIO 34 - analog water sensor (GPIO_NUM_34) */
|
||||||
|
/* Define CAN communication via I2C Connector */
|
||||||
|
#define CAN_TX GPIO_NUM_17 /**< GPIO 17 - water sensor SDA */
|
||||||
|
#define CAN_RX GPIO_NUM_16 /**< GPIO 16 - water sensor SCL */
|
||||||
#else
|
#else
|
||||||
#ifdef HWREVISION07
|
#ifdef HWREVISION07
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
/**
|
||||||
|
* @file can.h
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ControllerConfiguration.h"
|
||||||
|
|
||||||
|
#ifndef PLANTCTRL_CAN_H
|
||||||
|
#define PLANTCTRL_CAN_H
|
||||||
|
|
||||||
|
void can_setup(void);
|
||||||
|
void can_loop(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
+3
-10
@@ -22,18 +22,11 @@ build_flags = -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
|
|||||||
-DPLANT6_SENSORTYPE=FREQUENCY_MOD_RESISTANCE_PROBE
|
-DPLANT6_SENSORTYPE=FREQUENCY_MOD_RESISTANCE_PROBE
|
||||||
-DTIMED_LIGHT_PIN=CUSTOM1_PIN5
|
-DTIMED_LIGHT_PIN=CUSTOM1_PIN5
|
||||||
-DANALOG_WATER=GPIO_NUM_34
|
-DANALOG_WATER=GPIO_NUM_34
|
||||||
; Optional: Compatibilitymode for hardware revision 0.7
|
|
||||||
;-DHWREVISION07=1
|
|
||||||
|
|
||||||
board_build.partitions = defaultWithSmallerSpiffs.csv
|
board_build.partitions = defaultWithSmallerSpiffs.csv
|
||||||
|
lib_deps =
|
||||||
;#https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/partition-tables.html
|
bblanchon/ArduinoJson@^6.20.1
|
||||||
|
|
||||||
|
|
||||||
; the latest development brankitchen-lightch (convention V3.0.x)
|
|
||||||
lib_deps = bblanchon/ArduinoJson@^6.20.1
|
|
||||||
paulstoffregen/OneWire@^2.3.6
|
paulstoffregen/OneWire@^2.3.6
|
||||||
milesburton/DallasTemperature@^3.11.0
|
milesburton/DallasTemperature@^3.11.0
|
||||||
pololu/VL53L0X@^1.3.1
|
pololu/VL53L0X@^1.3.1
|
||||||
https://github.com/homieiot/homie-esp8266.git#develop
|
https://github.com/homieiot/homie-esp8266.git#develop
|
||||||
|
handmade0octopus/ESP32-TWAI-CAN@^1.0.1
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
/**
|
||||||
|
* @file can.cpp
|
||||||
|
*
|
||||||
|
* Based on ESP32-TWAI-CAN example
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <ESP32-TWAI-CAN.hpp>
|
||||||
|
#include "can.h"
|
||||||
|
|
||||||
|
#ifndef CAN_TX
|
||||||
|
#error CAN Interface not declared
|
||||||
|
#else
|
||||||
|
|
||||||
|
CanFrame rxFrame;
|
||||||
|
|
||||||
|
void sendObdFrame(uint8_t obdId) {
|
||||||
|
CanFrame obdFrame = { 0 };
|
||||||
|
obdFrame.identifier = 0x7DF; // Default OBD2 address;
|
||||||
|
obdFrame.extd = 0;
|
||||||
|
obdFrame.data_length_code = 8;
|
||||||
|
obdFrame.data[0] = 2;
|
||||||
|
obdFrame.data[1] = 1;
|
||||||
|
obdFrame.data[2] = obdId;
|
||||||
|
obdFrame.data[3] = 0xAA; // Best to use 0xAA (0b10101010) instead of 0
|
||||||
|
obdFrame.data[4] = 0xAA; // CAN works better this way as it needs
|
||||||
|
obdFrame.data[5] = 0xAA; // to avoid bit-stuffing
|
||||||
|
obdFrame.data[6] = 0xAA;
|
||||||
|
obdFrame.data[7] = 0xAA;
|
||||||
|
// Accepts both pointers and references
|
||||||
|
ESP32Can.writeFrame(obdFrame); // timeout defaults to 1 ms
|
||||||
|
}
|
||||||
|
|
||||||
|
void can_setup() {
|
||||||
|
// Setup serial for debbuging.
|
||||||
|
Serial.begin(115200);
|
||||||
|
|
||||||
|
// Set pins
|
||||||
|
ESP32Can.setPins(CAN_TX, CAN_RX);
|
||||||
|
|
||||||
|
// You can set custom size for the queues - those are default
|
||||||
|
ESP32Can.setRxQueueSize(5);
|
||||||
|
ESP32Can.setTxQueueSize(5);
|
||||||
|
|
||||||
|
// .setSpeed() and .begin() functions require to use TwaiSpeed enum,
|
||||||
|
// but you can easily convert it from numerical value using .convertSpeed()
|
||||||
|
ESP32Can.setSpeed(ESP32Can.convertSpeed(500));
|
||||||
|
|
||||||
|
// You can also just use .begin()..
|
||||||
|
if(ESP32Can.begin()) {
|
||||||
|
Serial.println("CAN bus started!");
|
||||||
|
} else {
|
||||||
|
Serial.println("CAN bus failed!");
|
||||||
|
}
|
||||||
|
|
||||||
|
// or override everything in one command;
|
||||||
|
// It is also safe to use .begin() without .end() as it calls it internally
|
||||||
|
if(ESP32Can.begin(ESP32Can.convertSpeed(500), CAN_TX, CAN_RX, 10, 10)) {
|
||||||
|
Serial.println("CAN bus started!");
|
||||||
|
} else {
|
||||||
|
Serial.println("CAN bus failed!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void can_loop() {
|
||||||
|
static uint32_t lastStamp = 0;
|
||||||
|
uint32_t currentStamp = millis();
|
||||||
|
|
||||||
|
if(currentStamp - lastStamp > 1000) { // sends OBD2 request every second
|
||||||
|
lastStamp = currentStamp;
|
||||||
|
sendObdFrame(5); // For coolant temperature
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can set custom timeout, default is 1000
|
||||||
|
if(ESP32Can.readFrame(rxFrame, 1000)) {
|
||||||
|
// Comment out if too many frames
|
||||||
|
Serial.printf("Received frame: %03X \r\n", rxFrame.identifier);
|
||||||
|
if(rxFrame.identifier == 0x7E8) { // Standard OBD2 frame responce ID
|
||||||
|
Serial.printf("Collant temp: %3d°C \r\n", rxFrame.data[3] - 40); // Convert to °C
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -38,6 +38,7 @@
|
|||||||
#include "MQTTUtils.h"
|
#include "MQTTUtils.h"
|
||||||
#include "esp_ota_ops.h"
|
#include "esp_ota_ops.h"
|
||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
|
#include "can.h"
|
||||||
|
|
||||||
extern "C" bool verifyRollbackLater(){
|
extern "C" bool verifyRollbackLater(){
|
||||||
return true;
|
return true;
|
||||||
@@ -964,6 +965,7 @@ void safeSetup()
|
|||||||
Serial.println("Initial Setup. Start Accesspoint...");
|
Serial.println("Initial Setup. Start Accesspoint...");
|
||||||
vmDownloadMode = true;
|
vmDownloadMode = true;
|
||||||
}
|
}
|
||||||
|
can_setup();
|
||||||
stayAlive.advertise("alive").setName("Alive").setDatatype(NUMBER_TYPE).settable(aliveHandler);
|
stayAlive.advertise("alive").setName("Alive").setDatatype(NUMBER_TYPE).settable(aliveHandler);
|
||||||
setupFinishedTimestamp = millis();
|
setupFinishedTimestamp = millis();
|
||||||
}
|
}
|
||||||
@@ -1078,6 +1080,8 @@ void loop()
|
|||||||
{
|
{
|
||||||
pumpActiveLoop();
|
pumpActiveLoop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
can_loop();
|
||||||
}
|
}
|
||||||
|
|
||||||
/***
|
/***
|
||||||
|
|||||||
Reference in New Issue
Block a user