Posts by md_fg

    Das Ziel ist die Hardware eines Pico-Eval-Board mit den C++ Beispielen zu Testen.

    Die Infos zu dem Board und die Beispiel Dateien für Python und C++ sind unter Resources hier zu finden.

    https://www.waveshare.com/wiki/Pico-Eval-Board

    Das Pico-Eval-Board ist eine umfassende Evaluierungslösung für den Raspberry Pi Pico.

    Mit einem 3,5-Zoll-65K-LCD-Display und diversen hilfreichen Onboard-Komponenten ermöglicht dieses Evaluation-Board das

    Ausprobieren fast aller On-Chip-Peripheriegeräte des RP2040, ohne dass eine umständliche Verkabelung erforderlich ist.

    Es ist die ideale Wahl für Benutzer, die schnell mit dem Raspberry Pi Pico und dem RP2040-Chip beginnen möchten.


    Ab hier der Weg um auf dem Raspberry Pi die C++ Dateien aus dem Paket Pico-Eval-Board-Code Übersetzen zu können.


    Step 1: Zuerst wird der Ist Zustand auf dem Raspberry Pi abgefragt.

    Code
    uname -a
    sudo apt install lshw
    sudo lshw            --> product: Raspberry Pi Model B Plus Rev 1.2
    less /etc/os-release -->    PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"

    Step 2: Der Raspberry Pi wird auf den Aktuellen Software Stand gebracht, dann die unbedingt benötigten Pakete Installiert.

    Code
    sudo apt update
    sudo apt upgrade
    sudo reboot
    uname -a
    sudo apt install cmake
    sudo apt install gcc-arm-none-eabi

    Step 3: Zum Übersetzen aller C++ Dateien wird das "pico-sdk" benötigt und von github geclont.

    Code
    mkdir pico_new
    cd pico_new/
    git clone https://github.com/raspberrypi/pico-sdk
    cd /home/pi/pico_new/pico-sdk
    git submodule update --init

    Step 4: Der einfachste Test nur die grüne OnBoard LED des Pico soll blinken.

    Code
    mkdir pico --> Nun mit Filezilla die Datei Pico-Eval-Board-Code.zip nach pico kopieren.
    cd pico
    unzip Pico-Eval-Board-Code.zip

    Step 5: Der Hersteller des Boards liefert Steuerdateien mit, diese müssen auf den Pfad des "pico-sdk" angepasst werden.

    Step 6: Nur wenn die Bootsel Taste auf dem Pico beim Verbinden des Pico mit dem Raspberry gedrückt ist kommt die Verbindung zustande.

    Code
    lsusb  --> Bus 001 Device 005: ID 2e8a:0003    # Der Pico
    df -Th --> /dev/sda1      vfat      128M    8,0K  128M    1% /media/pi/RPI-RP2        # Der Pico
    mount  --> /dev/sda1 on /media/pi/RPI-RP2 type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)
    
    ls -la /media/pi/RPI-RP2
    -r--r--r--  1 pi   pi     241 Sep  5  2008 INDEX.HTM
    -r--r--r--  1 pi   pi      62 Sep  5  2008 INFO_UF2.TXT

    Step 7: Die fertige *.uf2 Datei wird auf den Pico kopiert, danach ist ein Zugriff auf den Pico nicht mehr möglich: Datei oder Verzeichnis nicht gefunden

    Code
    cp GPIO.uf2 /media/pi/RPI-RP2

    Hallo

    Dann versuch mal ab Punkt 3 folgendes


    das echo ist ja nicht das Problem, sondern die Umleitung:

    Code
    > ${land}.csv

    ergibt

    Code
    > United States.csv

    wohingegen

    Code
    > "${land}.csv"

    das ergibt

    Code
    > "United States.csv"

    Danke der Code und die Erklährung dazu sind ein Volltreffer es läuft damit wie im L-User beschrieben.

    Hallo

    Aus einer großen *.csv Datei soll ein Script für 4 Länder einzelne *.csv Dateien erzeugen.

    Das Problem ist das Blank bei "United States"

    Code
    #!/usr/bin/bash
    for land in Germany Belgium "United States" Sweden
    do
    (head -n 1 owid-covid-data.csv; grep -F $land owid-covid-data.csv) > ${land}.csv
    done

    Das Script erzeugt die Germany.csv, Belgium.csv, Sweden.csv die Fehlermeldung lautet

    ./listing6.sh: Zeile 4: ${land}.csv: Mehrdeutige Umlenkung.

    Wie kann das gelöst werden.

    Hallo

    Bei mir haben die BME280 jeweils 4 Anschluss Stifte, die BMP280 haben 6 Stifte, beide haben als Standard die Adresse 0x76

    Wie in der Doku beschrieben muss die Datei /Arduino/libraries/Adafruit_BMP280_Library/Adafruit_BMP280.h

    bzw. BME280.h auf diese Adresse geändert werden.

    #define BMP280_ADDRESS (0x76)

    Leider muss das bei jedem Update der Bibliothek geschehen.

    Hallo framp

    Bei mir wird ein ESP32 für eine Wintergarten Steuerung mit 8 Relais für 2 Markisen und 2 Fenster Motoren benutzt.

    Das Programm läuft im Automatik oder Handbetrieb Mode bei Notfällen(Wind,Regen) werden die Markisen und Fenster geschlossen.

    Hier noch einige Programm Details.

    Der Wohlfühl Temperatur Bereich kann mit einer Plus bzw. Minus Taste verändern werden, mit sofortiger Verwendung im Automatik Modus.

    Das WLAN Passwort/SSID wurde in den Eeprom des ESP32 geschrieben, um dann beides bei jedem Programm Start auszulesen.

    Bei einem aktiven WLAN wird die NTP Zeit von einem auswählbaren NTP Server geholt, um dann die interne RTC mit der NTP Zeit zu synchronisieren.

    Es ist egal ob das aktive WLAN beim Programm Start(setup) oder zur Programm Laufzeit erkannt wird.

    Ein wieder inaktiv gewordenes WLAN wird vom Programm erkannt und die RTC Zeit wird für den weiteren Programm Ablauf benutzt.

    Eine Automatik um ein sporadisch aktives WLAN zu erkennen, alle 7 Minuten erfolgt ein WLAN Check nur im Automatik Modus.

    Wenn beim Programm Start das WLAN aktiv ist, wird die SSID, WLAN IP, DNS IP und Gateway IP auf dem 4 zeiligen LCD Display angezeigt.

    Bei aktiven WLAN kann ein Sketch Update über OTA(Over The Air) mit einer Passwort Abfrage erfolgen.

    Bei aktiven WLAN können Debug Meldungen mit UDP/Telnet(Port 23) auf einen Monitor Pc und in der Serial Konsole der IDE angesehen werden.

    Wird in der IDE der OTA Port aktiviert, kommen die Eigenen Debug Meldungen nur noch per Telnet auf einen Monitor Pc an.

    Die Anzeige von Uhrzeit, Datum, Temperatur, Feuchte, Luftdruck auf dem LCD ist ohne Auswirkung auf den Automatik Modus bzw. Handbetrieb.

    Mit den 4 Up bzw. 4 Down Tasten kann eine manuelle Fenster/Markisen Steuerung im Handbetrieb Modus erfolgen.

    Eine Reset Taste im Gerät sowie die Möglichkeit über die Telnet Verbindung vom Monitor Pc aus, das Programm neu zu starten(Reboot).

    Um nicht immer das Labornetzteil für kleine Breadboard Projekt zu benutzen, entstand dieses Transportable Netzteil.

    Herzstück sind zwei 3.7 Volt Li-Ion Akkus NCR18650PF mit 2600mAh jeder LiPo besitzt ein eigenes Lade Modul mit dem "TP 4056"

    Das TP 4056 Modul mit UIn von 4.5V bis 5.5V erzeugt ein IOut von max. 1A die Ladeendspannung für die Li-Ion Akkus beträgt +4.2 Volt.

    Mit zwei Handy Netzteilen können die Li-Ion Akkus bei Bedarf einzeln nachgeladen werden.

    Mit Hilfe von zwei StepUp Reglern MT 3608 können verschiedene Spannungen im Bereich von +4 Volt bis +28 Volt eingestellt werden.

    Das MT 3608 Modul kann bei UIn von +2V bis +24V ein UOut von +4V bis +28V bei max. 2A bereit stellen.

    Die zwei unterschiedlich eingestellbaren Spannungen der Module werden auf dem Netzteil mit zwei LED Modulen angezeigt.

    Mit Hilfe von Jumpern werden die eingestellten Spannungen einzeln pro Zweig eingeschaltet.

    Das Lade Modul(Platz 2) kann mit DIP Schaltern so Konfiguriert werden, das auch LP-50xxxx Akkus von 2600mAh bis zu 250mAh geladen werden können.

    Dazu steht eine weitere JST PH 2.0 Lade Buchse zur Verfügung.

    Bei Bedarf kann mit einem Schiebeschalter ein weiterer +5 Volt, 1A StepUp Regler mit USB Ausgang eingeschaltet werden.

    Die +5 Volt vom Handy Netzteil(Platz 2) sind auf Schraubklemmen separat Verfügbar.

    Hier noch einige Bilder des Netzteils.

    Die roten LEDs auf dem TP4056 zeigen der Li-Ion Akku wird geladen, die blauen LEDs zeigen der Li-Ion Akku ist voll.


    Hallo

    Bei Buster wird das Journal nur als tmpfs in /run/log/journal/xyz... geschrieben.

    Um das Journal auf die SD-Karte zu schreiben und reboot Fest lesen zu können reicht folgendes aus.

    Code
    sudo nano /etc/systemd/journald.conf
    # Storage=persistent und SystemMaxFileSize=10M eintragen.
    sudo systemctl reboot

    Danach wird in /run/log/journal/xyz.. NICHTS mehr geschrieben. Nur noch in /var/log/journal/xyz...

    Zur Kontrolle reicht ein.

    Code
    journalctl -b -0                                                # Zeigt alles vom aktuellen Boot
    journalctl -b -1                                                # Zeigt alles vom vorherigen Boot

    Hallo

    Die Deutschen Infos zu youtube-dl stehen hier:

    Arch Wiki


    Kontrollen:

    Code
    type youtube-dl
    youtube-dl --help

    Ein Tutorial über nextcloud mit -F werden alle Verfügbaren Formate angezeigt. Mit -f 22 wird das Beste Format geladen.

    Code
    youtube-dl -F https://www.youtube.com/watch?v=y4dtcr2NL5M
    youtube-dl -f 22 https://www.youtube.com/watch?v=y4dtcr2NL5M

    Zum Test der Stromversorgung wurde ein Raspberry Pi OS Buster mit dem Kernel "5.10.17+" Installiert.

    Wichtig für die Funktion der "EIN Tasten" Steuerung sind die folgenden Einträge in der "/boot/config.txt"

    gpio=19=ip,pu

    dtoverlay=gpio-poweroff,gpiopin=26


    Zur Technik:

    Als Ausgang zur Anzeige des RasPi Zustands mit einer Dual(2 Farben) LED wird der Pin 13 = GPIO 27 benutzt.

    Als Eingang wird Pin 35 = GPIO 19 benutzt, um die "EIN Taste" abzufragen.

    Die Poweroff Erkennung der Steuerung erfolgt mit Pin 37 = GPIO 26

    Nur bei Poweroff(Off) des Raspberry wird auch das Netzteil vom 220 Volt Netz getrennt.

    Es wird eine StandBy(Selbsthalte) Schaltung mit einem SN74HC10 benutzt.

    Mit der Grünen "EIN Taste" wird der gesamte Ablauf der "On - Off - Reboot" Funktionen gesteuert.

    Punkt 1. Die EIN Taste für ca. 1 Sekunde drücken, das RasPi Netzteil wird Eingeschaltet(220 Volt) der RasPi läuft hoch, danach kann je nach Wahl.

    Punkt 2. Die EIN Taste für ca. 1 Sekunde drücken, es erfolgt ein Reboot des RasPi "OHNE" eine 220 Volt Netz Trennung des RasPi Netzteils.

    Punkt 3. Die EIN Taste für ca. 4 Sekunde drücken, es erfolgt ein Poweroff des RasPi "MIT" einer 220 Volt Netz Trennung des RasPi Netzteils.

    Nur für Notfälle gibt es eine Rote "Not AUS Taste" d.H. die 220 Volt Netz Trennung erfolgt ohne den RasPi vorher anzuhalten.

    Es wird ein "18650" LiPo mit 2600 mAh benutzt, dieser wird vom Eingeschalteten RasPi Netzteil über einen Laderegler(TP4056) aufgeladen.

    Das Raspberry Netzteil muss eine Reserve je nach Ladestrom für den LiPo haben, ein 3A(15 Watt) Netzteil reicht aus.

    Je nachdem was für ein LiPo verwendet wird muss der Prog. Widerstand auf dem TP4056 Modul angepasst werden.

    Die Widerstands Werte für LiPos mit 1000mAh, 500mAh und 250mAh sind im Stromlaufplan des Projekts zu sehen.

    Ein StepUp Regler(MT3608) erzeugt aus den 3.7 bis 4.2 Volt des LiPo dann die +5 Volt für den SN74HC10 die Schaltung verbraucht ca. 1.5 mA im StandBy Betrieb.

    Wenn das RasPi Netzteil durch das Relais(Axicom D2N05-167) Eingeschaltet wurde, verbraucht die Schaltung dann ca. 30 mA

    Mit dem benutzten LiPo sind locker 2 Wochen StandBy Zeit zu erreichen, was mit einer blauen LED angezeigt wird.

    Nach 7 Tagen StandBy ist der 2600 mAh LiPo nach 1:30 Stunden wieder voll aufgeladen.


    Schaltplan:



    Ablauf im Detail:


    Punkt 1.

    Die EIN Taste wird für ca. 1 Sec. gedrückt der RasPi Startet und läuft Normal Hoch, die Dual LED leuchtet diffus gelb je nach Blickwinkel.

    Der RasPi ist fast Hochgefahren und der ta.timer startet nach 40 Sec. den ta.service

    Dieser legt den Ausgang Pin 13 = GPIO 27 auf Low. Nur die grüne LED leuchtet, die rote LED ist aus.


    Punkt 2.

    Die EIN Taste wird für ca. 1 Sec. gedrückt der Eingang Pin 35 = GPIO 19 erkennt LOW

    Das Script ta_shutdown wird gestartet und triggert den Ausgang Pin 13 = GPIO 27

    von HIGH nach LOW genau 3 mal für jeweils 0.5 Sec.

    Es wird ein Reboot ausgelöst das Netzteil wird nicht vom 220 Volt Netz getrennt.

    Die LED bleibt noch kurz rot, bis der RasPi neu startet dann leuchtet die LED wieder diffus gelb.

    Bis der ta.service nach 40 Sec. wieder nur die grüne LED einschaltet.


    Punkt 3.

    Die EIN Taste wird für ca. 4 Sec. gedrückt der Eingang Pin 35 = GPIO 19 erkennt LOW

    Das Script ta_shutdown wird gestartet und triggert den Ausgang Pin 13 = GPIO 27

    von HIGH nach LOW genau 3 mal für jeweils 1.5 Sec.

    Es wird ein Poweroff ausgelöst das Netzteil des RasPi wird vom 220 Volt Netz getrennt.

    Die Dual LED ist aus. Die Selbsthalte Schaltung ist in StandBy, der RasPi kann durch die EIN Taste wieder eingeschaltet werden.


    1. Installation: Mit Filezilla wird die Datei new-script.zip nach /home/pi/ kopiert.

    Code
    unzip new-script.zip
    cd new-script
    sudo cp ta_* /usr/local/bin/
    sudo cp ta.timer /etc/systemd/system/
    sudo cp ta.service /etc/systemd/system/
    ls -la /usr/local/bin/
    # cd /usr/local/bin/                    # Nur notwendig wenn die Dateien nicht Ausführbar sind.
    # chmod u+x ta_gn.sh
    # chmod u+x ta_rt.sh
    # chmod u+x ta_shutdown

    2. Einschalten: Des Timers und erste Abfragen.

    Code
    # Mit enable --now startet der Timer unverzüglich und permanent, so dass er auch nach einem Neustart aktiv ist.
    sudo systemctl enable --now ta.timer
    
    # Genügt damit eine nachträgliche Veränderung der Timer-Unit sofort wirksam wird.
    # sudo systemctl reenable --now ta.timer
    
    # Listet alle Timer auf. Sollen nur die aktiven Timer angezeigt werden genügt ein systemctl list-timers.
    systemctl list-timers --all

    3. Reboot: Und Kontrollen.

    4. Script: new-script.zip


    new-script.zip

    Hallo

    Das hochgelobte Logging ist es jedenfalls nicht, denn wenn es verreckt sagt es dir auch bloss das es tot ist und nicht warum.

    War die messages oder syslog in dem Punkt den besser.

    Ob systemd gut oder schlecht ist, die Distros auch Debian haben entschieden.

    Wir sollten es nutzen, der TE hatte ein Problem der Timer ist nur eine Lösung.

    Hallo

    Wie kle schon schrieb die rc.local ist ein Relikt.

    Zum Test habe ich die test.py von hyle in einen Service gepackt und mit einem Timer gestartet.

    Der Name von Service und Timer müssen gleich sein. Nach einem Reboot startet der Timer nach 40 Sekunden den Service.

    Alles läuft, damit ist ein Autostart Deiner *.py wieder möglich.

    Die Datei rc_new.timer

    Code
    [Unit]
    Description=Start vom rc_new.service - Hyle test.py Script.
    
    [Timer]
    OnBootSec=40sec
    Persistent=true
    
    [Install]
    WantedBy=timers.target

    Die Datei rc_new.service


    Einrichtung.

    Code
    sudo cp test.py /usr/local/bin/
    sudo cp rc_new.timer /etc/systemd/system/
    sudo cp rc_new.service /etc/systemd/system/

    Kontrolle und Abfragen vor dem Einschalten des Timers und ein Programm Test.

    Code
    ls -la /usr/local/bin/
        -rw-r--r--  1 root root  290 Apr 25 16:57 test.py
    ls -la /etc/systemd/system/
        -rw-r--r--  1 root root  264 Apr 25 16:57 rc_new.service
        -rw-r--r--  1 root root  142 Apr 25 16:57 rc_new.timer
    /usr/bin/python3 test.py
        test 83
        ^C    Abbruch
            Bye!

    Einschalten des Timers.

    Code
    sudo systemctl enable --now rc_new.timer
        Created symlink /etc/systemd/system/timers.target.wants/rc_new.timer -> /etc/systemd/system/rc_new.timer.
    systemctl reboot                            # Das geht auch als user pi

    Kontrolle und Abfragen nach dem Reboot.

    Bei Änderungen des Service warum auch immer, kann mit dem folgenden Kommando der Service sofort wieder aktiviert werden.

    Code
    sudo nano /etc/systemd/system/rc_new.service
    sudo systemctl reenable --now rc_new.timer
        Removed /etc/systemd/system/timers.target.wants/rc_new.timer.
        Created symlink /etc/systemd/system/timers.target.wants/rc_new.timer -> /etc/systemd/system/rc_new.timer.

    Hallo

    Versuche es mit einem Timer der ta.timer startet nach 40 Sekunden den ta.service mit Deinem Script.


    ta.timer

    Code
    [Unit]
    Description=Start vom ta.service - On Off Reboot per Taste.
    
    [Timer]
    OnBootSec=40sec
    Persistent=true
    
    [Install]
    WantedBy=timers.target

    ta.service

    sudo cp ta.timer /etc/systemd/system/

    sudo cp ta.service /etc/systemd/system/

    sudo systemctl enable --now ta.timer


    Kontrollen.

    systemctl list-timers --all

    ps -A | grep ta_s*

    Hallo

    Nach einigen Versuchen fehlt mir eine gute Idee. Das "meigrafd" Beispiel Script wurde zum Test benutzt.

    Bash
    #!/bin/bash
    
    GPIOpin=19
    
    ## init GPIOpin
    if [ ! -f /sys/class/gpio/gpio${GPIOpin}/value ]; then
        echo $GPIOpin > /sys/class/gpio/export
        echo in > /sys/class/gpio/gpio${GPIOpin}/direction
        echo 1 > /sys/class/gpio/gpio${GPIOpin}/active_low
    fi

    Die Abfragen sehen dann so aus.

    Code
    ls -la /sys/class/gpio/gpio19/          # active_low,device,direction,value alles vorhanden.
    less /sys/class/gpio/gpio19/direction   # in
    less /sys/class/gpio/gpio19/value       # Obwohl hier 1 steht der GPIO 19 liegt auf GND
    less /sys/class/gpio/gpio19/active_low  # Obwohl hier 1 steht der GPIO 19 liegt auf GND
    less /sys/class/gpio/gpio19/edge        # none
    less /sys/class/gpio/gpio19/uevent      # leer
    gpio readall                            # OK der GPIO 19 liegt auf GND
    |  19 |  24 | GPIO.24 |   IN | 0 | 35 ||

    Auch die folgenden 3 Versuche bringen nichts.

    Code
    sudo nano /boot/config.txt
    # Interner Pullup für GPIO 19 aktivieren.
    dtoverlay=gpio-key,gpio=19,label="GPIO_UP",gpio_pull=2
    dtoverlay=gpio-key,gpio=19,label="GPIO_UP",gpio_pull=2,active_low=1
    dtoverlay=gpio-key,gpio=19,keycode=240,label="GPIO_UP",gpio_pull=2,active_low=1
    #
    journalctl -f
    Apr 14 09:47:07 raspberrypi ta_gn.sh[319]: cat: /sys/class/gpio/gpio19/value: Datei oder Verzeichnis nicht gefunden
    Apr 14 09:47:07 raspberrypi ta_gn.sh[319]: [85B blob data]