Inhaltsverzeichnis:

Wifi-fähige OLED ESP32 Autoanzeigen - Gunook
Wifi-fähige OLED ESP32 Autoanzeigen - Gunook

Video: Wifi-fähige OLED ESP32 Autoanzeigen - Gunook

Video: Wifi-fähige OLED ESP32 Autoanzeigen - Gunook
Video: How to Use OLED Displays with ESP32 Boards | ESP32 with OLED display 2024, Dezember
Anonim
Image
Image
Wifi-fähige OLED ESP32 Autoanzeigen
Wifi-fähige OLED ESP32 Autoanzeigen

Einführungen zuerst…

Ich baue Autolehren als eine Art Ein- und Aus-Hobby. Siehe https://www.instructables.com/id/Remote-Car-Monit… und https://www.instructables.com/id/Remote-Car-Monit… für zwei neuere Beispiele. Besonders gefallen mir solche, die mit den Originalteilen des Autos harmonieren. Also, warum ist dieses hier anders und was hat mich dazu inspiriert, es zu bauen. Die Antwort sind zwei Dinge:

1) ESP32 - Ich wollte das neue Kind auf dem Blockchip ausprobieren, zumal die arduino-basierte Toolchain dafür ziemlich ausgereift ist. Eines der interessanten Dinge, die der ESP32 ermöglicht, ist IOT mit seinen integrierten WLAN- und Bluetooth-Funktionen. Die Community hat mehrere Bibliotheken geschrieben, um dies einigermaßen einfach zu machen (Webserver, APs, WLAN-Clients, mDNS usw.).

2) Billige OLED-Bildschirme - Im Jahr 2007 habe ich ein Messgerät mit einem TFT hergestellt, das anstelle der Uhr auf einem GD (2004-2007) WRX saß. TFT gibt es in verschiedenen Geschmacksrichtungen. Manche arbeiten nachts besser, manche tagsüber besser usw. Aber keiner von ihnen funktioniert unter allen Bedingungen. Ich habe den Fehler meines Verhaltens erst erkannt, als während des sonnigen Trackdays eines Forummitglieds eine der von mir verwendeten Messgeräte nutzlos war. Geben Sie OLED ein, die für Automobilanwendungen großartig sind. Sie sind nachts nicht zu hell und (was noch wichtiger ist) bei den meisten Sonnenlichtbedingungen sichtbar.

Dies ist ein zwei für einen anweisbaren, da ich alles für zwei gängige Autoanzeigen, Öldruck und Turbodruck geschrieben habe. Beide sind im Wesentlichen dasselbe: ein Messgerät mit kleinem Formfaktor mit einem animierten OLED-Display im analogen Look mit diskreten Zahlen und angezeigten Höchstwerten. Beide fungieren auch als WLAN-APs und Webserver. Wenn man sich über einen Computer oder ein Mobiltelefon mit ihnen verbindet, ist ein bewegtes EKG-Stammdiagramm sichtbar (dies ist der etwas innovative Teil).

Lieferungen

HELTEC ESP32 Modul - Holen Sie sich die WLAN-Variante

Öldruckspezifische Teile:

Öldrucksensor - Ich habe ein Automter 5222 Öldrucksensor-Anschlussteile verwendet - dies variiert je nach Auto und Installationsort. Bitte konsultieren Sie Servicehandbücher, Foren, Mechanik usw. und machen Sie dies richtig, damit keine Öllecks auftreten

Spezifische Teile für Ladedruckanzeige:

  • Luftdrucksensor (nur wenn Sie eine Ladedruckanzeige machen möchten) -
  • Luftschlauch
  • T-Fittings

Bibliotheken, die ich benutzt habe, die unverzichtbar waren:

Smoothiecharts - https://smoothiecharts.org/ Ausgezeichnete und leichte Live-Update-Charts. Sehr anpassbar und nicht darauf angewiesen, auf eine js-Bibliothek an anderer Stelle im Internet zu verweisen. Dies ermöglicht ein Setup vom Typ „local-IOT“und die gesamte Bibliothek passt in einen einzigen String für die Webserver-Anweisung im Code!

ESPAsyncWebServer -https://github.com/me-no-dev/ESPAsyncWebServer- tut was auf der Box steht und macht es gut

ThingPulse OLED-Grafikbibliothek (manchmal auch Squix-Bibliothek genannt) - https://github.com/ThingPulse/esp8266-oled-ssd130… - sehr effiziente und unkomplizierte Grafik für die ESP-Chips. Erlaubte mir, etwas faules Programmieren zu machen und trotzdem überzeugende Animationen zu erhalten.

Werkzeuge/Sonstiges:

Lötkolben - wird verwendet, um lange Kabelwege für Sensoren herzustellen, Stiftleisten an Bord zu installieren, Schrumpffolie zu verwenden usw.

Schraubendreher/Steckdosen/andere Kfz-Werkzeuge - erforderlich, um Sensoren am Auto zu installieren

doppelseitiges Klebeband - um Messgeräte in Gehäusen zu installieren und Gehäuse in Autos zu installieren (Heißkleber und andere Dinge könnten funktionieren, aber ich bevorzuge das doppelseitige Außenverkleidungsband von 3M. Es hält gut und kann abgezogen werden, ohne Dinge zu beschädigen.)

Schere - zum Kleben und Schneiden von Schläuchen und Kabelbindern

Kabelbinder - zum Zusammenhalten von Gegenständen, Bündeln von Kabeln unter dem Armaturenbrett und im Motorraum, Halten von Sensoren usw.

Schritt 1: Code zuerst / Hardware an zweiter Stelle

Code zuerst/Hardware an zweiter Stelle
Code zuerst/Hardware an zweiter Stelle
Erster Code/ Zweite Hardware
Erster Code/ Zweite Hardware

Code kann hier heruntergeladen werden:

Öldruck -

Ladedruck -

Druckerhöhung mit Gesichtern statt analog aussehenden Messgeräten -

Grafikcode: Die ThingPulse-Bibliothek ist so effizient, dass Sie xbms direkt übereinander zeichnen und überzeugende Ergebnisse erzielen können!

Die Messuhrbilder stammen tatsächlich aus einem Open-Source-Grafik-Repository (https://thenounproject.com/). Der Künstler Iconic, CY (https://thenounproject.com/icon/490005/).

Ich habe Gimp verwendet, um 20 verschiedene Frames zu generieren, wobei die Nadel auf jedes Teilstrich zeigt. Die Smiley-Symbole stammen von NOVITA ASTRI, ID und sind hier:

Dann habe ich diese alle mit dieser Technik in const uint8_t Arrays umgewandelt (Hinweis: Wenn die Farben bei der Anzeige invertiert sind, invertieren Sie einfach die Farben des Originals): https://blog.squix.org/2015/05/esp8266- nodemcu-ho…

Der Code für die Live-Animation ist ziemlich einfach:

  • Messwert vom Sensor abrufen
  • Skalenwert (ich habe es 1 zu 1 für positive Boost-Werte gemacht und die Nadel nur bewegen, wenn sie im Boost ist, nicht, wenn sie im Vakuum ist)
  • Zeichnen Sie xbm und notieren Sie dann für alles andere Zahlenzeichen.
  • spülen und wiederholen

Sensorcode: Ich verwende den Sensorcode, den ich für diese beiden Sensoren für einige andere Projekte verwendet habe, wieder. Ich habe etwas Mittelwertbildung hinzugefügt, um von nervösen Sensoren wegzukommen. Dies beinhaltet das Lesen jeder "Lesung", die durchschnittlich 5 Lesungen umfasst.

Boost-Code (Sensor gibt einen analogen Wert von 0-5 Volt an, den der ADC in Schritte von 0-1024 umwandelt):

int getBoost () { float rboost = ((analogRead (36) + analogRead (36) + analogRead (36) + analogRead (36) + analogRead (36))/5); //float ResultPSI = (rboost*(.00488)/(.022)+20)/6.89 - atmo; // verlassen von /6,89 für kpa float ResultPSI = (((rboost / 4095) + 0,04) / 0,004) * 0,145 - atmo; // um 0.145, um psi zu berechnen // 4096 Werte auf esp32 / * rBoost = rBoost + 1; if (rBoost >= 20) { rBoost = 0; }*/ zurück (ErgebnisPSI); }

Öldruckcode (der Sensor variiert seinen Widerstand basierend auf dem von ihm erfassten Druck, daher ist ein Spannungsteiler erforderlich, um dies in eine Spannung von 0-5 V umzuwandeln siehe: https://electronics.stackexchange.com/questions/3…https:/ /www.instructables.com/id/Remote-Car-Monito… (nach unten) für weitere Informationen):

int getOilPSI () { Float Psival = ((analogRead (36) + analogRead (36) + analogRead (36) + analogRead (36) + analogRead (36))/5); Psival = –0,0601*Psival + 177,04 – 14,5; Rückkehr-Psival; }

Webserver- und AP-Funktionalität: Die AP-Funktionalität ist ziemlich einfach - Instanziieren Sie und AP-Objekt mit der ESSID, die Sie übertragen möchten, und dem Passwort, und Sie können loslegen.

const char *ssid = "boost_gauge_ap";const char *password = "password";

WiFi.softAP (ssid, Passwort);

Es hat sogar einen DHCP-Server, sodass Sie sich darüber keine Sorgen machen müssen. Standardmäßig ist die IP 192.168.1.4 (keine Ahnung warum, genau das haben sie gewählt). Der Webserver ist etwas kniffliger und erforderte ein wenig Recherche. Grundsätzlich möchten Sie einen asynchronen Webserver, damit er Live-Aktualisierungsdaten abrufen kann. Zum Glück gibt es dafür eine Bibliothek. Ich bin kein Javascript-Entwickler, also habe ich an einer Reihe von Diagramm- und Grafikbibliotheken herumgebastelt, bis ich über Smoothie-Charts gestolpert bin. Die meisten anderen Diagrammbibliotheken sind so geschrieben, dass sie alle Arten von Code von anderen Bibliotheken aus dem Web erben, die beim Rendern einer Seite dynamisch geladen werden. Ich wollte, dass dies unabhängig vom Internet funktioniert, also war dies eine große Entdeckung. Zweitens musste es klein genug sein, um auf ein Arduino zu passen, und wie Sie im Code sehen können, passt es in ein einzelnes Zeichenarray.

Webserver-Deklarationen: #include AsyncTCP.h #include ESPAsyncWebServer.h … AsyncWebServer server(80); //Instanziieren und Port auswählen (80 ist Standard für http) … server.on("/", HTTP_GET, (AsyncWebServerRequest *request){ request->send(200, "text/html", "… // die Webseite + die Smoothiecharts-Bibliothek in einem riesigen Zeichenarray }); server.on("/val", HTTP_GET, (AsyncWebServerRequest *request){ //die erste Seite ruft tatsächlich diese sehr kleine Seite auf, die nur den Wert request zurückgibt ->send(200, "text/html", Sboost); }); server.begin();

Schritt 2: Hardware und Verkabelung

Hardware und Verkabelung
Hardware und Verkabelung
Hardware und Verkabelung
Hardware und Verkabelung
Hardware und Verkabelung
Hardware und Verkabelung

In der Galerie abgebildet sind die beiden Sensoren, die ich verwende. Der große goldfarbene ist ein Autometer 2242 Öldrucksensor. Der Körper und das Gewinde dieses Sensors sind geerdet und die Klemme ist der Widerstandswert.

Autometer stellt Ihnen für jeden seiner Sensoren eine Druck- oder Temperaturbeständigkeitskurve zur Verfügung. Diese habe ich mit einem Spannungsteiler in Spannung umgewandelt (siehe Schaltplan).

Der Luftdrucksensor MPX4250AP hat drei stromführende Pins und mehrere unbenutzte Pins. Sie sind V in, Masse und Sensorausgang. Es gibt einen 0-5-V-Messwert aus, der vom Mikrocontroller gelesen werden kann (oder im Fall dieses Mikrocontrollers 0-3 Volt. Der Sensormesswert wird also mit einem Spannungsteiler herunterskaliert.). Das Datenblatt dazu finden Sie hier:

Es gibt mehrere Probleme beim Herunterskalieren von 5V auf 3V-Logik. In meinem Fall habe ich der Einfachheit halber den Spannungsteiler verwendet und ich hatte die Teile um meine Werkbank. Sie werden aufgrund des möglichen Fehlers der zusätzlichen Komponenten (der beiden Widerstände) einen kleinen Fehler in die Messwerte einbringen. Dadurch können Ihre Messwerte in einigen Fällen um 10 % reduziert werden. Damit kann ich leben. Wenn Sie dies nicht können, möchten Sie möglicherweise einen Operationsverstärker und Widerstände oder einen Logikpegelwandler verwenden (erhältlich von verschiedenen Elektronikanbietern. Sparkfun hat einen hier: https://www.sparkfun.com/products/12009 Ich kann zu ihm wechseln als Ich erhalte manchmal hohe Messwerte auf diesem Messgerät (tatsächlich habe ich dieses Produkt in meinem Schaltplan gezeigt).

Ich habe die ESP32 über USB mit Strom versorgt. Dazu gehörte, ein Direktladegerät wie dieses: https://www.amazon.com/gp/product/B00U2DGKOK/ref=p… mit dem Auto zu verkabeln und dann einen USB-Hub zu verwenden, um es aufzuteilen. Sie können sehen, dass ich rechtwinklige USB-Kabel verwendet habe, um sicherzustellen, dass alles auf kleinem Raum funktioniert (https://www.amazon.com/gp/product/B00ENZDFQ4/ref=p…).

Andere Fotos zeigen Orte, an denen ich Löcher geschnitten oder Draht verlegt habe. Jedes Auto wird anders sein. Seien Sie vorsichtig, Messer und Scheren sind scharf, Elektrizität kann gefährlich sein. Bitte trennen Sie die Batterie, bevor Sie die Dinger verkabeln.

Schritt 3: 3D-gedrucktes Gehäuse

3D-gedrucktes Gehäuse
3D-gedrucktes Gehäuse

Ich habe dafür mehrere 3D-gedruckte Gehäuse verwendet.

  • Ein generisches großes Rundmessgerät mit 2 Bildschirmen. Sie können dies auf diesen Bildern der ersten Seite sehen. Ich habe es neben meine Uhr auf meinem Armaturenbrett gelegt.
  • Ein Single Gauge Wedge-Style, der in den Uhrenbereich eines Subaru Impreza (wrx, sti usw.) von ca. 2008 bis 2014 passt.
  • Ein Stück mit zwei Messgeräten, das auf Lenkradsäulen und andere leicht abgerundete Oberflächen passt:

Sie können diese gerne kopieren und an Ihre Bedürfnisse anpassen. Keiner von ihnen ist perfekt und sie alle erfordern ein wenig Anpassung.

Einige Notizen:

  • Ich beendete meine mit Plastidip; es ist die bevorzugte Methode der Faulen.
  • Beim Schleifen von Kunststoffen entstehen feine Partikel, die nicht gut für Sie sind. Verwenden Sie eine geeignete Maske.
  • Ich habe PETG für meine Gehäuse verwendet. ABS ist auch gut. PLA verzieht sich in der heißen Sonne auf einem Armaturenbrett.
IoT-Herausforderung
IoT-Herausforderung
IoT-Herausforderung
IoT-Herausforderung

Zweiter Preis bei der IoT Challenge

Empfohlen: