Buzzer integrated, pin assignment improvements
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
|||||||
*~
|
*~
|
||||||
.pio
|
.pio
|
||||||
|
lib/generated
|
||||||
|
|||||||
81
README
81
README
@@ -7,11 +7,22 @@ OBP Keypad
|
|||||||
- Konfiguration über Web-Interface
|
- Konfiguration über Web-Interface
|
||||||
- PWR leuchtet grün wen NMEA2000-Verbindung etabliert
|
- PWR leuchtet grün wen NMEA2000-Verbindung etabliert
|
||||||
- PWR leuchtet rot wenn nur Stromversorgung aktiv ist
|
- PWR leuchtet rot wenn nur Stromversorgung aktiv ist
|
||||||
|
- Buzzer für Tastendruck-Feedback
|
||||||
|
passiv, damit können die Töne mit PWM programmiert werden
|
||||||
|
- I²C Temp/Hum-Sensor SHT31
|
||||||
|
|
||||||
Optionen
|
Optionen für später
|
||||||
- I²C Temp/Hum-Sensor
|
- Helligkeitssensor z.B. zum automatischen LED dimmen
|
||||||
- Seatalk1 Anschluß für Fernbedienung Raymarine Pinnenpilot
|
Pins umbelegen:
|
||||||
- EPaper-Display 2.9" zur Anzeige der Tastenbelegung
|
I²C -> D0, D1 (GPIO 44, 43)
|
||||||
|
LEDs umsortieren: A0 bis A5 für die 6 LEDs
|
||||||
|
A6 als analoger Input für Sensor
|
||||||
|
A7 ist frei als Reserve
|
||||||
|
- Version 2
|
||||||
|
- Seatalk1 Anschluß für Fernbedienung Raymarine Pinnenpilot
|
||||||
|
- Version X, immer als Option
|
||||||
|
- EPaper-Display 2.9" zur Anzeige der Tastenbelegung
|
||||||
|
bedeutet auch: viel komplizierteres Gehäuse
|
||||||
|
|
||||||
Damit die LEDs nicht stören, kann umgeschaltet werden zwischen
|
Damit die LEDs nicht stören, kann umgeschaltet werden zwischen
|
||||||
permanentem Leuchten und nur kurzem Aufblinken bei Betätigung.
|
permanentem Leuchten und nur kurzem Aufblinken bei Betätigung.
|
||||||
@@ -35,8 +46,10 @@ Anschlußmöglichkeiten
|
|||||||
für mechanische Taster
|
für mechanische Taster
|
||||||
1x JST 2.54 XH 7 Pin Steckverbinder -> Tasten
|
1x JST 2.54 XH 7 Pin Steckverbinder -> Tasten
|
||||||
Masseverbindung über einzelnes getrenntes Kabel
|
Masseverbindung über einzelnes getrenntes Kabel
|
||||||
|
in eine 8-fach WAGO-Klemme
|
||||||
|
|
||||||
für LEDs
|
für LEDs
|
||||||
|
TBD
|
||||||
|
|
||||||
|
|
||||||
Bemerkungen
|
Bemerkungen
|
||||||
@@ -60,7 +73,7 @@ Das Mapping von Nano-Pin zu GPIO muß noch überprüft werden.
|
|||||||
Der nano kann in zwei verschiedenen Mapping-Modi betrieben
|
Der nano kann in zwei verschiedenen Mapping-Modi betrieben
|
||||||
werden!
|
werden!
|
||||||
|
|
||||||
Die Pins für i²C (A4, A5)und SPI (D11, D12, D13) sind absichtlich
|
Die Pins für SPI (D11, D12, D13) sind absichtlich
|
||||||
nicht belegt um frei für Erweiterungen zu sein. An SPI kann
|
nicht belegt um frei für Erweiterungen zu sein. An SPI kann
|
||||||
ggf. ein Epaper angeschlossen werden.
|
ggf. ein Epaper angeschlossen werden.
|
||||||
|
|
||||||
@@ -75,51 +88,22 @@ ggf. ein Epaper angeschlossen werden.
|
|||||||
6 Y D7 GPIO10 Illumination
|
6 Y D7 GPIO10 Illumination
|
||||||
DST Y D8 GPIO17 Destination, On/Off
|
DST Y D8 GPIO17 Destination, On/Off
|
||||||
|
|
||||||
LED Pin
|
LED Pin Remarks
|
||||||
------ ----------
|
------ ---------- ----------------------
|
||||||
A A0 GPIO1
|
A A0 GPIO1
|
||||||
B A1 GPIO2
|
B A1 GPIO2
|
||||||
C A2 GPIO3
|
C A2 GPIO3
|
||||||
(D A3 reserved for future)
|
RGB-R A3 GPIO4
|
||||||
RGBA A6 GPIO4
|
RGB-G A6 GPIO13
|
||||||
RGBB A7 GPIO13
|
RGB-B A7 GPIO14
|
||||||
RGBC B1 GPIO14
|
|
||||||
|
|
||||||
CAN Pin
|
CAN Pin Remarks
|
||||||
------ ----------
|
------ ---------- ----------------------
|
||||||
RX D9
|
RX D9 GPIO18
|
||||||
TX D10
|
TX D10 GPIO21
|
||||||
|
|
||||||
|
BUZZER
|
||||||
Beschaltung MCU Pico !!! Nicht fertig / ungültig !!!
|
TBD
|
||||||
--------------------
|
|
||||||
|
|
||||||
Stromversorgung über VSYS mit 5V.
|
|
||||||
|
|
||||||
|
|
||||||
Key Color Pin Remarks
|
|
||||||
----- ------- -------- --------------------
|
|
||||||
1 B GP11
|
|
||||||
2 B GP12
|
|
||||||
3 B GP13
|
|
||||||
4 B GP14
|
|
||||||
5 B GP15
|
|
||||||
6 Y GP16 Illumination
|
|
||||||
DST Y GP17 Destination, On/Off
|
|
||||||
|
|
||||||
LED Pin
|
|
||||||
------ ----------
|
|
||||||
A GP1
|
|
||||||
B GP2
|
|
||||||
C GP4
|
|
||||||
RGBA GP5
|
|
||||||
RGBB GP6
|
|
||||||
RGBC GP7
|
|
||||||
|
|
||||||
CAN Pin
|
|
||||||
------ ----------
|
|
||||||
RX GP9
|
|
||||||
TX GP10
|
|
||||||
|
|
||||||
Bauteilliste
|
Bauteilliste
|
||||||
------------
|
------------
|
||||||
@@ -132,6 +116,7 @@ Bauteilliste
|
|||||||
1x RGB LED (gemeinsame Anode)
|
1x RGB LED (gemeinsame Anode)
|
||||||
3x LED grün
|
3x LED grün
|
||||||
1x SN65HVD230 CAN Transceiver
|
1x SN65HVD230 CAN Transceiver
|
||||||
|
1x Buzzer, passiv
|
||||||
1x Gehäuse 150x60x40
|
1x Gehäuse 150x60x40
|
||||||
4x Befestigungsschraube M4
|
4x Befestigungsschraube M4
|
||||||
1x Kabelsatz
|
1x Kabelsatz
|
||||||
|
|||||||
@@ -4,35 +4,48 @@
|
|||||||
#define WIFI_CHANNEL 9
|
#define WIFI_CHANNEL 9
|
||||||
#define WIFI_MAX_STA 2
|
#define WIFI_MAX_STA 2
|
||||||
|
|
||||||
// Keys
|
|
||||||
#define KEY_1 GPIO_NUM_5 // D2
|
|
||||||
#define KEY_2 GPIO_NUM_6 // D3
|
|
||||||
#define KEY_3 GPIO_NUM_7 // D4
|
|
||||||
#define KEY_4 GPIO_NUM_8 // D5
|
|
||||||
#define KEY_5 GPIO_NUM_9 // D6
|
|
||||||
#define KEY_6 GPIO_NUM_10 // D7
|
|
||||||
#define KEY_DST GPIO_NUM_17
|
|
||||||
|
|
||||||
// LEDS
|
|
||||||
#define LED_A GPIO_NUM_1
|
|
||||||
#define LED_B GPIO_NUM_2
|
|
||||||
#define LED_C GPIO_NUM_3
|
|
||||||
#define LED_RGBA GPIO_NUM_4
|
|
||||||
#define LED_RGBB GPIO_NUM_13
|
|
||||||
#define LED_RGBC GPIO_NUM_14
|
|
||||||
#define LED_USER GPIO_NUM_48
|
|
||||||
|
|
||||||
// CAN bus for NMEA2000 connection
|
|
||||||
#define CAN_RX GPIO_NUM_18 // D9
|
|
||||||
#define CAN_TX GPIO_NUM_21 // D10
|
|
||||||
#define CAN_RECOVERY_PERIOD 3000
|
|
||||||
|
|
||||||
// NMEA2000 defaults
|
// NMEA2000 defaults
|
||||||
#define N2K_DEFAULT_NODEID 124
|
#define N2K_DEFAULT_NODEID 124
|
||||||
|
|
||||||
|
// Keys
|
||||||
|
#define KEY_1 GPIO_NUM_5 // D2
|
||||||
|
#define KEY_2 GPIO_NUM_6 // D3
|
||||||
|
#define KEY_3 GPIO_NUM_7 // D4
|
||||||
|
#define KEY_4 GPIO_NUM_8 // D5
|
||||||
|
#define KEY_5 GPIO_NUM_9 // D6
|
||||||
|
#define KEY_6 GPIO_NUM_10 // D7
|
||||||
|
#define KEY_DST GPIO_NUM_17 // D8
|
||||||
|
|
||||||
|
// Buzzer
|
||||||
|
#define BUZZER GPIO_NUM_0 // B1
|
||||||
|
#define LEDC_CHANNEL 0
|
||||||
|
#define LEDC_TIMER_8_BIT 8
|
||||||
|
#define LEDC_BASE_FREQ 5000
|
||||||
|
|
||||||
|
// LEDS
|
||||||
|
#define LED_A GPIO_NUM_1 // A0
|
||||||
|
#define LED_B GPIO_NUM_2 // A1
|
||||||
|
#define LED_C GPIO_NUM_3 // A2
|
||||||
|
#define RGBLED_R GPIO_NUM_4 // A3 red
|
||||||
|
#define RGBLED_G GPIO_NUM_13 // A6 green
|
||||||
|
#define RGBLED_B GPIO_NUM_14 // A7 blue
|
||||||
|
#define LED_USER GPIO_NUM_48 // internal red user led
|
||||||
|
|
||||||
|
// CAN bus for NMEA2000 connection
|
||||||
|
#define CAN_RX GPIO_NUM_18 // D9
|
||||||
|
#define CAN_TX GPIO_NUM_21 // D10
|
||||||
|
#define CAN_RECOVERY_PERIOD 3000
|
||||||
|
|
||||||
// I2C temp. sensor
|
// I2C temp. sensor
|
||||||
#define I2C_SDA GPIO_NUM_11 // A4
|
#define I2C_SDA GPIO_NUM_11 // A4
|
||||||
#define I2C_SCL GPIO_NUM_12 // A5
|
#define I2C_SCL GPIO_NUM_12 // A5
|
||||||
|
#define I2C_SPEED 100000UL // 100kHz clock speed on I2C bus
|
||||||
|
|
||||||
// I2C addresses
|
// I2C addresses
|
||||||
#define SHT31_ADDRESS 0x44
|
#define SHT31_ADDRESS 0x44
|
||||||
|
|
||||||
|
// SPI display connector (optional)
|
||||||
|
#define SPI_MOSI GPIO_NUM_38 // D11
|
||||||
|
#define SPI_MISO GPIO_NUM_47 // D12
|
||||||
|
#define SPI_SCK GPIO_NUM_48 // D13
|
||||||
|
#define SPI_CS GPIO_NUM_46 // B0
|
||||||
|
|||||||
91
src/main.cpp
91
src/main.cpp
@@ -59,9 +59,14 @@ bool rgb_r = false;
|
|||||||
bool rgb_g = false;
|
bool rgb_g = false;
|
||||||
bool rgb_b = false;
|
bool rgb_b = false;
|
||||||
|
|
||||||
char destination = 'A'; // A | B | C
|
char destination = 'A'; // A | B | C
|
||||||
|
uint8_t led_brightness = 128; // analog pin: 0 .. 255
|
||||||
|
uint8_t rgp_brightness = 128;
|
||||||
|
|
||||||
|
uint buzzerpower = 50; // TBD make use of this
|
||||||
|
|
||||||
SHT31 sht(SHT31_ADDRESS);
|
SHT31 sht(SHT31_ADDRESS);
|
||||||
|
bool sht_available = false;
|
||||||
|
|
||||||
int nodeid; // NMEA2000 id on bus
|
int nodeid; // NMEA2000 id on bus
|
||||||
Nmea2kTwai &NMEA2000=*(new Nmea2kTwai(CAN_TX, CAN_RX, CAN_RECOVERY_PERIOD));
|
Nmea2kTwai &NMEA2000=*(new Nmea2kTwai(CAN_TX, CAN_RX, CAN_RECOVERY_PERIOD));
|
||||||
@@ -110,8 +115,15 @@ void wifi_init_softap()
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
|
|
||||||
|
Serial.begin(115200);
|
||||||
|
delay(500);
|
||||||
|
Serial.println("Starting...");
|
||||||
|
|
||||||
|
ESP_LOGI(TAG, "Test logging: %d", 100);
|
||||||
|
|
||||||
nodeid = N2K_DEFAULT_NODEID;
|
nodeid = N2K_DEFAULT_NODEID;
|
||||||
Serial.print("N2K default node id=");
|
Serial.print("N2K default node id=");
|
||||||
Serial.println(nodeid);
|
Serial.println(nodeid);
|
||||||
@@ -120,15 +132,7 @@ void setup() {
|
|||||||
nodeid = preferences.getInt("LastNodeId", N2K_DEFAULT_NODEID);
|
nodeid = preferences.getInt("LastNodeId", N2K_DEFAULT_NODEID);
|
||||||
preferences.end();
|
preferences.end();
|
||||||
|
|
||||||
/*
|
// Setup webserver
|
||||||
// Connect as client to existing network
|
|
||||||
WiFi.begin(ssid, password);
|
|
||||||
while (WiFi.status() != WL_CONNECTED) {
|
|
||||||
delay(1000);
|
|
||||||
Serial.println("Connecting to WiFi..");
|
|
||||||
}
|
|
||||||
Serial.println(WiFi.localIP()); */
|
|
||||||
|
|
||||||
WiFi.persistent(false);
|
WiFi.persistent(false);
|
||||||
WiFi.mode(WIFI_MODE_AP);
|
WiFi.mode(WIFI_MODE_AP);
|
||||||
|
|
||||||
@@ -154,7 +158,7 @@ void setup() {
|
|||||||
}
|
}
|
||||||
server.begin();
|
server.begin();
|
||||||
|
|
||||||
|
// NMEA2000 configuration
|
||||||
NMEA2000.SetProductInformation("00000001", // Manufacturer's Model serial code
|
NMEA2000.SetProductInformation("00000001", // Manufacturer's Model serial code
|
||||||
74, // Manufacturer's product code
|
74, // Manufacturer's product code
|
||||||
"OBPkeypad6/1", // Manufacturer's Model ID
|
"OBPkeypad6/1", // Manufacturer's Model ID
|
||||||
@@ -184,38 +188,51 @@ void setup() {
|
|||||||
delay(1000);
|
delay(1000);
|
||||||
digitalWrite(LED_USER, LOW);
|
digitalWrite(LED_USER, LOW);
|
||||||
|
|
||||||
// destination leds
|
// Buzzer
|
||||||
pinMode(LED_A, OUTPUT);
|
ledcSetup(LEDC_CHANNEL, LEDC_BASE_FREQ, LEDC_TIMER_8_BIT);
|
||||||
digitalWrite(LED_A, HIGH);
|
ledcAttachPin(BUZZER, LEDC_CHANNEL);
|
||||||
pinMode(LED_B, OUTPUT);
|
// Test tone while booting
|
||||||
digitalWrite(LED_B, LOW);
|
if (ledcWriteTone(BUZZER, 4000) == 0) {
|
||||||
pinMode(LED_C, OUTPUT);
|
Serial.println("Error setting buzzer tone");
|
||||||
digitalWrite(LED_C, LOW);
|
} else {
|
||||||
|
delay(750);
|
||||||
|
ledcWriteTone(BUZZER, 0); // Buzzer off
|
||||||
|
}
|
||||||
|
|
||||||
// Init onbard RGB LED
|
// Init onbard RGB LED
|
||||||
// TODO
|
// TODO
|
||||||
|
|
||||||
// enclosure rgb led (common anode)
|
// destination leds
|
||||||
pinMode(LED_RGBA, OUTPUT);
|
pinMode(LED_A, OUTPUT);
|
||||||
digitalWrite(LED_RGBA, HIGH);
|
pinMode(LED_B, OUTPUT);
|
||||||
pinMode(LED_RGBB, OUTPUT);
|
pinMode(LED_C, OUTPUT);
|
||||||
digitalWrite(LED_RGBB, HIGH);
|
|
||||||
pinMode(LED_RGBC, OUTPUT);
|
|
||||||
digitalWrite(LED_RGBC, HIGH);
|
|
||||||
|
|
||||||
Serial.begin(115200);
|
//digitalWrite(LED_A, HIGH);
|
||||||
delay(500);
|
//digitalWrite(LED_B, LOW);
|
||||||
Serial.println("Starting...");
|
//digitalWrite(LED_C, LOW);
|
||||||
|
analogWrite(LED_A, led_brightness);
|
||||||
|
analogWrite(LED_B, 0);
|
||||||
|
analogWrite(LED_C, 0);
|
||||||
|
|
||||||
|
// enclosure rgb led
|
||||||
|
pinMode(RGBLED_R, OUTPUT);
|
||||||
|
pinMode(RGBLED_G, OUTPUT);
|
||||||
|
pinMode(RGBLED_B, OUTPUT);
|
||||||
|
// common anode so we need high here to switch off!
|
||||||
|
digitalWrite(RGBLED_R, HIGH);
|
||||||
|
digitalWrite(RGBLED_G, HIGH);
|
||||||
|
digitalWrite(RGBLED_B, HIGH);
|
||||||
|
|
||||||
// I²C
|
// I²C
|
||||||
Serial.print("SHT31_LIB_VERSION: ");
|
Serial.print("SHT31_LIB_VERSION: ");
|
||||||
Serial.println(SHT31_LIB_VERSION);
|
Serial.println(SHT31_LIB_VERSION);
|
||||||
Wire.begin(I2C_SDA, I2C_SCL);
|
Wire.begin(I2C_SDA, I2C_SCL);
|
||||||
Wire.setClock(100000);
|
Wire.setClock(I2C_SPEED);
|
||||||
uint16_t stat = sht.readStatus();
|
uint16_t stat = sht.readStatus();
|
||||||
Serial.print(stat, HEX);
|
|
||||||
// stat = ffff anscheinend Fehler
|
// stat = ffff anscheinend Fehler
|
||||||
// = 8010 läuft anscheinend
|
// = 8010 läuft anscheinend
|
||||||
|
sht_available = (stat == 0x8010);
|
||||||
|
Serial.print(stat, HEX);
|
||||||
Serial.println();
|
Serial.println();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -229,10 +246,10 @@ void loop() {
|
|||||||
button = 1;
|
button = 1;
|
||||||
if (rgb_r) {
|
if (rgb_r) {
|
||||||
rgb_r = false;
|
rgb_r = false;
|
||||||
digitalWrite(LED_RGBA, HIGH);
|
digitalWrite(RGBLED_R, HIGH);
|
||||||
} else {
|
} else {
|
||||||
rgb_r = true;
|
rgb_r = true;
|
||||||
digitalWrite(LED_RGBA, LOW);
|
digitalWrite(RGBLED_R, LOW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (digitalRead(KEY_2) == LOW) {
|
if (digitalRead(KEY_2) == LOW) {
|
||||||
@@ -240,10 +257,10 @@ void loop() {
|
|||||||
button += 2;
|
button += 2;
|
||||||
if (rgb_g) {
|
if (rgb_g) {
|
||||||
rgb_g = false;
|
rgb_g = false;
|
||||||
digitalWrite(LED_RGBB, HIGH);
|
digitalWrite(RGBLED_G, HIGH);
|
||||||
} else {
|
} else {
|
||||||
rgb_g = true;
|
rgb_g = true;
|
||||||
digitalWrite(LED_RGBB, LOW);
|
digitalWrite(RGBLED_G, LOW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (digitalRead(KEY_3) == LOW) {
|
if (digitalRead(KEY_3) == LOW) {
|
||||||
@@ -251,10 +268,10 @@ void loop() {
|
|||||||
button += 4;
|
button += 4;
|
||||||
if (rgb_b) {
|
if (rgb_b) {
|
||||||
rgb_b = false;
|
rgb_b = false;
|
||||||
digitalWrite(LED_RGBC, HIGH);
|
digitalWrite(RGBLED_B, HIGH);
|
||||||
} else {
|
} else {
|
||||||
rgb_b = true;
|
rgb_b = true;
|
||||||
digitalWrite(LED_RGBC, LOW);
|
digitalWrite(RGBLED_B, LOW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -315,7 +332,7 @@ void loop() {
|
|||||||
delay(200);
|
delay(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---- PRINT NUMBER EVERY SECOND ----
|
// development heartbeat
|
||||||
if (millis() - lastPrint >= 1000) {
|
if (millis() - lastPrint >= 1000) {
|
||||||
lastPrint = millis();
|
lastPrint = millis();
|
||||||
counter++;
|
counter++;
|
||||||
|
|||||||
Reference in New Issue
Block a user