Skip to content

Instantly share code, notes, and snippets.

@Bouni
Created May 27, 2021 13:12
Show Gist options
  • Save Bouni/2cfc1f0cd1ed617a90726757c58ad5b4 to your computer and use it in GitHub Desktop.
Save Bouni/2cfc1f0cd1ed617a90726757c58ad5b4 to your computer and use it in GitHub Desktop.
Hoermann HCP protocoll test on ESP32 (syncbreak hack)
/* vim:set sw=2: */
#include <Arduino.h>
#define RX2 21
#define TX2 22
#define DIR 17
int rx = 0;
void enable_transmitter() {
// set output for RS485 Transmitter
digitalWrite(DIR, HIGH);
}
void disable_transmitter() {
// clear output for RS485 Transmitter
digitalWrite(DIR, LOW);
}
void syncbreak()
{
Serial2.end();
gpio_reset_pin(GPIO_NUM_22); // Hack found here: https://github.com/espressif/arduino-esp32/issues/3032
pinMode(TX2, OUTPUT);
enable_transmitter();
digitalWrite(TX2, LOW);
digitalWrite(LED_BUILTIN, HIGH);
delayMicroseconds(920);
digitalWrite(TX2, HIGH);
digitalWrite(LED_BUILTIN, LOW);
disable_transmitter();
Serial2.begin(19200, SERIAL_8N1, RX2, TX2);
}
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
pinMode(DIR, OUTPUT);
digitalWrite(DIR, LOW);
Serial.begin(38400);
Serial2.begin(19200, SERIAL_8N1, RX2, TX2);
delay(100);
}
void loop()
{
syncbreak();
enable_transmitter();
Serial2.write(0x80);
Serial2.write(0x83);
Serial2.write(0x29);
Serial2.write(0x00);
Serial2.write(0x10);
Serial2.write(0x3A);
disable_transmitter();
delay(50);
while(Serial2.available() > 0) {
rx = Serial2.read();
Serial.println(rx, HEX);
}
Serial.println("Wait for next round");
delay(1000);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment