Schlagwort-Archive: Arduino

BitBastelei #335 – ESP8266 Webserver (AJAX/SPIFFS) für China-Fliegenfänger

BitBastelei #335 - ESP8266 Webserver (AJAX/SPIFFS) für China-Fliegenfänger

(619 MB) 00:49:02

2019-05-26 10:00 🛈

Vor einigen Wochen hatten wir uns einen „Fliegenfänger“ angesehen, der sich technisch nicht sonderlich anspruchsvoll darstellte. In IoT-Zeiten natürlich völlig indiskutabel, also darf das Teil nun als Übungswiese für den ESP8266 dienen. Auf dem Programm also – nach dem nötigen Hardware-Umbau – eine Runde ESP8266-Webserver mit AJAX und SPIFFS – und das ganze ausführlich erklärt.

Inhalt

  • 08:00 Beginn Programmierung
  • 08:23 ESP8266 mit dem WLAN verbinden
  • 13:35 Einfacher Zugriff auf den ESP8266: MDNS
  • 15:44 ESP8266 als Webserver
  • 17:50 Texte im Browser anzeigen
  • 19:39 Mehrere Webseiten per URL, Variablen ausgeben
  • 21:29 Unbekannte URLs abfangen
  • 22:50 Browserausgabe mit HTML formatieren
  • 25:12 Webseiten und Bilder per SPIFFS
  • 31:52 Live-Werte mit Javascript, AJAX und JSON
  • 40:31 Programmbeispiel auf Basis der gezeigten Codes mit JQuery und Bootstrap

Links zum Thema

BitBastelei #327 – Abstandsmessung per Ultraschall: HC-SR04 mit Arduino

BitBastelei #327 - Abstandsmessung per Ultraschall: HC-SR04 mit Arduino

(273 MB) 00:14:05

2019-03-31 10:00 🛈

Abstände misst man meist mit dem Maßband, dieses lässt sich aber nur schwer an einen Arduino anschließen. Eine Alternative sind Sensormodule wie der HC-SR04, welche die Länge einer Strecke per Ultraschall bestimmen können. Wie diese funktionieren, warum man dazu Zeit messen muss und wie sich die Sensoren mit Arduino verwenden lassen – das schauen wir uns dann in diesem Video an.

Links zum Thema

Ergänzungen:

Der beschriftete IC ist ein LM324 (Quad OpAmp). Die anderen könnten MAX232A (Als Ladungspumpe) und EM78P153S (Chinesischer OTP µC) sein. Ein komplettes Reverse-Engeneering in Englisch findet sich unter http://uglyduck.vajn.icu/ep/archive/2014/01/Making_a_better_HC_SR04_Echo_Locator.html.

BitBastelei #324 – FETBoard: Einfaches GPIO für NodeMCU und Arduino Pro Mini

BitBastelei #324 - FETBoard: Einfaches GPIO für NodeMCU und Arduino Pro Mini

(2 GB) 00:29:47

2019-03-10 11:00 🛈

Immer wieder das selbe hier: Ein MOSFET mit passendem Widerstand muss an einen µC. Um diese Aufgabe zu vereinfachen habe ich irgendwann mitten in der Nacht ein Board zusammengeklickt.

KiCAD-Dateien und Gerber:

Hinweise:

  • 06:58 Im Sinne von Pull-Up/Down
  • 11:14 Am Pro Mini sind SPI-Leitungen dafür frei gelassen

BitBastelei #322 – STM8: Wenn’s mal günstiger sein soll

BitBastelei #322 - STM8: Wenn's mal günstiger sein soll

(198 MB) 00:17:34

2019-02-24 11:00 🛈

Mikrocontroller stecken heute in fast jedem Produkt. Wenn man selbst bastelt findet sich meist ein ATMega328P (aka Arduino), ESP8266/ESP32 oder vielleicht mal ein STM32. Wenn das Projekt eher anspruchslos ist, man aber noch ein paar Cent sparen möchte, ist auch der eher selten anzutreffende STM8 eine Option. Schauen wir mal, wie man ihn Programmiert bekommt und er sich schlägt.

Links zum Thema

BitBastelei #321 – WLAN-Stromzähler mit Modbus, ESP8266/Arduino und SDM120

BitBastelei #321 - WLAN-Stromzähler mit Modbus, ESP8266/Arduino und SDM120

(1 GB) 00:35:49

2019-02-17 11:00 🛈

Vor einiger Zeit hatte ich mir einen Messwandlerzähler besorgt, welcher beim Thema Stromnetzanalyse deutlich mehr Daten als mein bisheriger S0-Zähler liefern sollte. Die digitale Schnittstelle dazu nennt sich „Modbus“ und basiert auf RS485. Um mich damit vertraut zu machen habe ich mir einen kleineren, einphasigen Modbus-Zähler geschnappt und mir angesehen was notwendig ist um diesen mit einem ESP8266 zu verbinden.

Links zum Thema

BitBastelei #318 – RGB-LED-Video-Wall-Panel (P4)

BitBastelei #318 - RGB-LED-Video-Wall-Panel (P4)

(1 GB) 00:30:04

2019-01-27 11:00 🛈

Mit der in #308 gezeigten LED-Matrix ließ sich ja schon einiges an Spaß haben, aber eine Farbe und 8×8 LEDs ist halt auch etwas einschränkend. Nun also „mehr und bunt“: Eine RGB-LED-Matrix, welche normal bei großen Videoleinwänden zum Einsatz kommt, ist als neues Spielzeug eingetroffen.

Weitere Informationen und Links

Korrekturen und Ergänzungen:

Inzwischen hat BigClive auch eine eigene Software zum Ansteuern dieser LED-Module online gestellt: https://www.youtube.com/watch?v=_dB1w99AwGE

BitBastelei #311 – Lange Funkstrecken mit Arduino, LoRaWAN/RFM95W und The Things Network

BitBastelei #311 - Lange Funkstrecken mit Arduino, LoRaWAN/RFM95W und The Things Network

(362 MB) 00:23:35

2018-12-02 11:00 🛈

Wenn man Daten drahtlos übertragen möchte ist mit den üblichen Funkmodulen für Arduino & Co meist nach wenigen hundert Metern Schluss. Zwar gibt es mit Handymodulen einfache Möglichkeiten, jedoch ist hierzu eine entsprechende Datenkarte samt Vertrag notwendig. An dieser Stelle kommt die proprietäre Modulationsart „LoRa“ (Long Range) ins Spiel: Hiermit können draußen im frei Nutzbaren 868MHz-Bereich Strecken von mehreren Kilometern überbrückt werden. Wem das nicht reicht kann auf LoraWAN zurückgreifen. Hierbei betreiben Freiwillige und Firmen LoRa-Empfänger, welche empfangene Datenpakete ins Internet weiterleiten.

Ardunio-Library
https://github.com/matthijskooijman/arduino-lmic

LoRa-Videos von Andreas Spiess (EN)
https://www.youtube.com/watch?v=hMOwbNUpDQA&list=PL3XBzmAj53Rkkogh-lti58h_GkhzU1n7U

TheThingsNetwork
https://thethingsnetwork.org

Hamnetdb (Funkstrecken simulieren)
https://hamnetdb.net/map.cgi

RMOnline (Funkausbreitung simulieren)
http://www.ve2dbe.com/rmonline.html

BitBastelei #310 – VSCode und PlatformIO statt Arduino IDE

BitBastelei #310 - VSCode und PlatformIO statt Arduino IDE

(144 MB) 00:32:35

2018-11-25 11:00 🛈

Die Arduino IDE dürfte nahezu jeder kennen, der mit Mikrocontrollern herumspielt. Ich selbst nutze in meinem Videos jedoch immer wieder auch PlatformIO auf Basis von VSCode. Daimmer mal wieder Fragen zur Einrichtung aufkamen also mal ein schneller Blick auf die Unterschiede, Installation und Funktionen.

BitBastelei #308 – LED-Matrix mit MAX7219

BitBastelei #308 - LED-Matrix mit MAX7219

(490 MB) 00:22:16

2018-11-11 11:00 🛈
Wenn es darum geht viele LEDs anzusteuern gibt es viele Möglichkeiten: Serielle Systeme wie z.B. die „Neopixel“-Streifen oder Matrizen wie z.B. bei meiner 7-Segment-Anzeige sind die häufigsten Vertreter. Letztere hatte ich zuletzt händisch mit Schieberegistern und Dekadenzählern aufgebaut – mit dem MAX7219 gibt es jedoch einen fertigen Controller, welcher einen deutlich einfacheren Aufbau verspricht.

Hinweise und Ergänzungen:

Code

BitBastelei #308 – LED-Matrix mit MAX7219 weiterlesen

BitBastelei #305 – EC-Karten-Terminal-Recycling: LCD&Keypad an ESP8266

BitBastelei #305 - EC-Karten-Terminal-Recycling: LCD&Keypad an ESP8266

(318 MB) 00:30:29

2018-10-21 10:00 🛈
Vor einiger Zeit hatte ich ein altes EC-Kartenterminal zerlegt und schon angemerkt, dass man viele der Bauteile recyclen kann. Dieses mal geht es um das Display sowie die Tastatur – eigentlich eine einfache Aufgabe. Eigentlich.

Links

Quellcode Testsoftware

#include <Arduino.h>
#include <SPI.h>
#include <MCP23S17.h>
#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>

extern "C" {
    #include "user_interface.h"
}

const char* kbdmap = "K##.0CRE321MSO654FTe987U";
const char* cmdmap = " +-*/";

#define ROWS 4
#define COLS 6

LiquidCrystal_PCF8574 lcd(0x27);
MCP gpio(0, 15);
int8_t last = 0;

String num1, num2;
byte cmd = 0;

void setPinMode(void) {
    uint16_t out = 0xFFFF;
    out <<= (ROWS);
    gpio.pinMode(out);
    gpio.pullupMode(out);
    gpio.inputInvert(out);
    out = ~out;
    gpio.digitalWrite(out);
}

void startLCD(void) {
    int error;
    Serial.println("LCD...");
    Wire.begin(D1, D2);
    Wire.beginTransmission(0x27);
    error = Wire.endTransmission();
    Serial.print("Return: ");
    Serial.print(error);

    if (error == 0) {
        Serial.println(": LCD found.");
    } else {
        Serial.println(": LCD not found.");
    }

    lcd.begin(20, 2); // initialize the lcd
    lcd.home();
    lcd.clear();
    lcd.print("BitBa // POS-Matrix");
}

void setup() {
    Serial.begin(115200);
    Serial.print("\nInit...");
    gpio.begin();

    setPinMode();

    Serial.println("OK");

    startLCD();
}

int8_t checkKeys(void) {
    byte row, col;
    int input;
    for(row = 0; row < ROWS; row++) {
        gpio.digitalWrite(row, LOW);
        delay(1);
        input = gpio.digitalRead();
        gpio.digitalWrite(row, HIGH);
        for(col=0; col < COLS; col++) {
            if(input & (1<<(ROWS + col))) {
                return (byte)(COLS * row + col);
            }
        }
    }
    return -1;
}

void loop() {
    int8_t input = checkKeys(); 
    int8_t check = 0xFF;
    float result = num2.toFloat();
    bool change = false;
    if(result == 0) result = num1.toFloat();

    if(input < (COLS*ROWS) && input >= 0 && last != input) {
        Serial.print(input);
        Serial.print(": ");
        last = input;
        if(input >= 0) {
            check = kbdmap[input];
            Serial.print(check);
        }else{
            check = 0xFF;
        }
        Serial.println();
        delay(15); //Poor maker debounce
    }else{
        check = 0xFF;
    }

    if(check != 0xFF) {
        switch(check) {
            //K##.0CRE321MSO654FTe987U
            case 'K':
                cmd = 4;
                change = true;
                break;
            case 'R':
                cmd = 3;
                change = true;
                break;
            case 'S':
                cmd = 2;
                change = true;
                break;
            case 'T':
                cmd = 1;
                change = true;
                break;
            case 'C':
                cmd = 0;
                num1 = "";
                num2 = "";
                change = true;
                break;
            case 'U':
                cmd = 0;
                num2 = "";
                change = true;
                break;
            case 'F':
                if(cmd == 0) {
                    if(num1.length() > 0) num1.remove(num1.length()-1);
                }else{
                    if(num2.length() > 0) num2.remove(num2.length()-1);
                }
                change = true;
                break;
            case '#':
                switch(cmd) {
                    case 1:
                        result = num1.toFloat() + num2.toFloat();
                        break;
                    case 2:
                        result = num1.toFloat() - num2.toFloat();
                        break;
                    case 3:
                        result = num1.toFloat() * num2.toFloat();
                        break;
                    case 4:
                        result = num1.toFloat() / num2.toFloat();
                        break;
                }
                cmd = 0;
                num1 = result;
                num2 = "";
                change = true;
                break;
            case '.':
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                if(cmd == 0) {
                    num1 += (char)check;
                }else{
                    num2 += (char)check;
                }
                change = true;
        }

        if(change) {
            lcd.clear();
            lcd.setCursor(0, 0);
            lcd.print(num1);
            if(cmd > 0) {
                lcd.setCursor(18, 0);
                lcd.print(" ");
                lcd.print(cmdmap[cmd]);
                lcd.setCursor(0, 1);
                lcd.print(num2);
            }
        }
    }
}

 

 

Hinweis: Der bei 19:40 gezeigter GPIO-Expander wurde mir seinerzeit von ICStation.com zur Verfügung gestellt.