Buzzer integrated, pin assignment improvements
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
*~
|
||||
.pio
|
||||
lib/generated
|
||||
|
||||
81
README
81
README
@@ -7,11 +7,22 @@ OBP Keypad
|
||||
- Konfiguration über Web-Interface
|
||||
- PWR leuchtet grün wen NMEA2000-Verbindung etabliert
|
||||
- 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
|
||||
- I²C Temp/Hum-Sensor
|
||||
- Seatalk1 Anschluß für Fernbedienung Raymarine Pinnenpilot
|
||||
- EPaper-Display 2.9" zur Anzeige der Tastenbelegung
|
||||
Optionen für später
|
||||
- Helligkeitssensor z.B. zum automatischen LED dimmen
|
||||
Pins umbelegen:
|
||||
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
|
||||
permanentem Leuchten und nur kurzem Aufblinken bei Betätigung.
|
||||
@@ -35,8 +46,10 @@ Anschlußmöglichkeiten
|
||||
für mechanische Taster
|
||||
1x JST 2.54 XH 7 Pin Steckverbinder -> Tasten
|
||||
Masseverbindung über einzelnes getrenntes Kabel
|
||||
in eine 8-fach WAGO-Klemme
|
||||
|
||||
für LEDs
|
||||
TBD
|
||||
|
||||
|
||||
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
|
||||
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
|
||||
ggf. ein Epaper angeschlossen werden.
|
||||
|
||||
@@ -75,51 +88,22 @@ ggf. ein Epaper angeschlossen werden.
|
||||
6 Y D7 GPIO10 Illumination
|
||||
DST Y D8 GPIO17 Destination, On/Off
|
||||
|
||||
LED Pin
|
||||
------ ----------
|
||||
A A0 GPIO1
|
||||
B A1 GPIO2
|
||||
C A2 GPIO3
|
||||
(D A3 reserved for future)
|
||||
RGBA A6 GPIO4
|
||||
RGBB A7 GPIO13
|
||||
RGBC B1 GPIO14
|
||||
LED Pin Remarks
|
||||
------ ---------- ----------------------
|
||||
A A0 GPIO1
|
||||
B A1 GPIO2
|
||||
C A2 GPIO3
|
||||
RGB-R A3 GPIO4
|
||||
RGB-G A6 GPIO13
|
||||
RGB-B A7 GPIO14
|
||||
|
||||
CAN Pin
|
||||
------ ----------
|
||||
RX D9
|
||||
TX D10
|
||||
CAN Pin Remarks
|
||||
------ ---------- ----------------------
|
||||
RX D9 GPIO18
|
||||
TX D10 GPIO21
|
||||
|
||||
|
||||
Beschaltung MCU Pico !!! Nicht fertig / ungültig !!!
|
||||
--------------------
|
||||
|
||||
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
|
||||
BUZZER
|
||||
TBD
|
||||
|
||||
Bauteilliste
|
||||
------------
|
||||
@@ -132,6 +116,7 @@ Bauteilliste
|
||||
1x RGB LED (gemeinsame Anode)
|
||||
3x LED grün
|
||||
1x SN65HVD230 CAN Transceiver
|
||||
1x Buzzer, passiv
|
||||
1x Gehäuse 150x60x40
|
||||
4x Befestigungsschraube M4
|
||||
1x Kabelsatz
|
||||
|
||||
@@ -4,35 +4,48 @@
|
||||
#define WIFI_CHANNEL 9
|
||||
#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
|
||||
#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
|
||||
#define I2C_SDA GPIO_NUM_11 // A4
|
||||
#define I2C_SCL GPIO_NUM_12 // A5
|
||||
#define I2C_SDA GPIO_NUM_11 // A4
|
||||
#define I2C_SCL GPIO_NUM_12 // A5
|
||||
#define I2C_SPEED 100000UL // 100kHz clock speed on I2C bus
|
||||
|
||||
// I2C addresses
|
||||
#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_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);
|
||||
bool sht_available = false;
|
||||
|
||||
int nodeid; // NMEA2000 id on bus
|
||||
Nmea2kTwai &NMEA2000=*(new Nmea2kTwai(CAN_TX, CAN_RX, CAN_RECOVERY_PERIOD));
|
||||
@@ -110,8 +115,15 @@ void wifi_init_softap()
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
void setup() {
|
||||
|
||||
Serial.begin(115200);
|
||||
delay(500);
|
||||
Serial.println("Starting...");
|
||||
|
||||
ESP_LOGI(TAG, "Test logging: %d", 100);
|
||||
|
||||
nodeid = N2K_DEFAULT_NODEID;
|
||||
Serial.print("N2K default node id=");
|
||||
Serial.println(nodeid);
|
||||
@@ -120,15 +132,7 @@ void setup() {
|
||||
nodeid = preferences.getInt("LastNodeId", N2K_DEFAULT_NODEID);
|
||||
preferences.end();
|
||||
|
||||
/*
|
||||
// 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()); */
|
||||
|
||||
// Setup webserver
|
||||
WiFi.persistent(false);
|
||||
WiFi.mode(WIFI_MODE_AP);
|
||||
|
||||
@@ -154,7 +158,7 @@ void setup() {
|
||||
}
|
||||
server.begin();
|
||||
|
||||
|
||||
// NMEA2000 configuration
|
||||
NMEA2000.SetProductInformation("00000001", // Manufacturer's Model serial code
|
||||
74, // Manufacturer's product code
|
||||
"OBPkeypad6/1", // Manufacturer's Model ID
|
||||
@@ -184,38 +188,51 @@ void setup() {
|
||||
delay(1000);
|
||||
digitalWrite(LED_USER, LOW);
|
||||
|
||||
// destination leds
|
||||
pinMode(LED_A, OUTPUT);
|
||||
digitalWrite(LED_A, HIGH);
|
||||
pinMode(LED_B, OUTPUT);
|
||||
digitalWrite(LED_B, LOW);
|
||||
pinMode(LED_C, OUTPUT);
|
||||
digitalWrite(LED_C, LOW);
|
||||
// Buzzer
|
||||
ledcSetup(LEDC_CHANNEL, LEDC_BASE_FREQ, LEDC_TIMER_8_BIT);
|
||||
ledcAttachPin(BUZZER, LEDC_CHANNEL);
|
||||
// Test tone while booting
|
||||
if (ledcWriteTone(BUZZER, 4000) == 0) {
|
||||
Serial.println("Error setting buzzer tone");
|
||||
} else {
|
||||
delay(750);
|
||||
ledcWriteTone(BUZZER, 0); // Buzzer off
|
||||
}
|
||||
|
||||
// Init onbard RGB LED
|
||||
// TODO
|
||||
|
||||
// enclosure rgb led (common anode)
|
||||
pinMode(LED_RGBA, OUTPUT);
|
||||
digitalWrite(LED_RGBA, HIGH);
|
||||
pinMode(LED_RGBB, OUTPUT);
|
||||
digitalWrite(LED_RGBB, HIGH);
|
||||
pinMode(LED_RGBC, OUTPUT);
|
||||
digitalWrite(LED_RGBC, HIGH);
|
||||
// destination leds
|
||||
pinMode(LED_A, OUTPUT);
|
||||
pinMode(LED_B, OUTPUT);
|
||||
pinMode(LED_C, OUTPUT);
|
||||
|
||||
Serial.begin(115200);
|
||||
delay(500);
|
||||
Serial.println("Starting...");
|
||||
//digitalWrite(LED_A, HIGH);
|
||||
//digitalWrite(LED_B, LOW);
|
||||
//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
|
||||
Serial.print("SHT31_LIB_VERSION: ");
|
||||
Serial.println(SHT31_LIB_VERSION);
|
||||
Wire.begin(I2C_SDA, I2C_SCL);
|
||||
Wire.setClock(100000);
|
||||
Wire.setClock(I2C_SPEED);
|
||||
uint16_t stat = sht.readStatus();
|
||||
Serial.print(stat, HEX);
|
||||
// stat = ffff anscheinend Fehler
|
||||
// = 8010 läuft anscheinend
|
||||
sht_available = (stat == 0x8010);
|
||||
Serial.print(stat, HEX);
|
||||
Serial.println();
|
||||
|
||||
}
|
||||
@@ -229,10 +246,10 @@ void loop() {
|
||||
button = 1;
|
||||
if (rgb_r) {
|
||||
rgb_r = false;
|
||||
digitalWrite(LED_RGBA, HIGH);
|
||||
digitalWrite(RGBLED_R, HIGH);
|
||||
} else {
|
||||
rgb_r = true;
|
||||
digitalWrite(LED_RGBA, LOW);
|
||||
digitalWrite(RGBLED_R, LOW);
|
||||
}
|
||||
}
|
||||
if (digitalRead(KEY_2) == LOW) {
|
||||
@@ -240,10 +257,10 @@ void loop() {
|
||||
button += 2;
|
||||
if (rgb_g) {
|
||||
rgb_g = false;
|
||||
digitalWrite(LED_RGBB, HIGH);
|
||||
digitalWrite(RGBLED_G, HIGH);
|
||||
} else {
|
||||
rgb_g = true;
|
||||
digitalWrite(LED_RGBB, LOW);
|
||||
digitalWrite(RGBLED_G, LOW);
|
||||
}
|
||||
}
|
||||
if (digitalRead(KEY_3) == LOW) {
|
||||
@@ -251,10 +268,10 @@ void loop() {
|
||||
button += 4;
|
||||
if (rgb_b) {
|
||||
rgb_b = false;
|
||||
digitalWrite(LED_RGBC, HIGH);
|
||||
digitalWrite(RGBLED_B, HIGH);
|
||||
} else {
|
||||
rgb_b = true;
|
||||
digitalWrite(LED_RGBC, LOW);
|
||||
digitalWrite(RGBLED_B, LOW);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -315,7 +332,7 @@ void loop() {
|
||||
delay(200);
|
||||
}
|
||||
|
||||
// ---- PRINT NUMBER EVERY SECOND ----
|
||||
// development heartbeat
|
||||
if (millis() - lastPrint >= 1000) {
|
||||
lastPrint = millis();
|
||||
counter++;
|
||||
|
||||
Reference in New Issue
Block a user