Redis in PHP integrieren

Redis ist ein über PHP-Befehle gesteuerter Cache, er funktioniert nicht von alleine und muss in PHP eingebunden werden. Mit Redis lassen sich Variablen und z.B. Große Tabellen im Ram ablegen.

Dieses Tut zeigt Anhand eines Beispiel wie man lang ladende Php Seiten über Redis Cached und den Cache über Veränderungen in der Datenbank aktualisiert.

Zuerst wird eine Datenbankabfrage auf das letzte Update in z.B. einer großen Tabelle gestellt. Diese Zeit nutzen wir für die Cache Aktualisierung.

Jetzt erstellen wir ein Redis Objekt und KEY, Value Paare welche Redis direkt im Ram zwischenspeichert.

Jetzt vergleichen wir die gerade in mysql ausgelesene letzte Tabellenupdate Zeit mit der von Redis gespeicherten Zeit und generieren die Seite für den cache neu wenn sich diese unterscheiden.

Arduino farbige Fonts (ESP32)

1. Für jeden Buchstaben

1.1 Einzelnen Buchstaben markieren

1.2  Markierung Kopieren (Strg+C)

1.3 Einfügen als Neues Bild (Strg+Shift+V)

1.4 Bild auf Inhalt zuschneiden(Shortcut in den Settings vergeben)

2.5 Speichern als „A.xcf“ (Strg+S)

3. Installieren des Davids Batch Processor und erster Schritt

3.1 Input: Add all XCF Files

3.2 Output as BMP

3.3 Bilderordner öffnen und in der ansicht Breite und Höhe Spalten anzeigen lassen

3.4 Bilder nach Breite und Höhe sortieren und höchste wie breiteste Pixel aufschreiben.

3.5 Gegebenfalls einzelne sehr breite /Hohe Buchstaben nacheditieren (Zum Beispiel W)

4.1 Add BMPs from Folder in Batch Processor

4.2 Gehe zu Resize, Enable, absolute Centered with Padding Background Black

4.3 Resize zum höchsten und breitesten Pixeln

5. IrfanView Batch Renaming

5.1 Bilder zur Stapelverarbeitung hinzufügen  und nach P# umbenennen

6. Konvertiere Bilder zu Image.bin und array.h Datei

6.1 Dazu habe ich ein kleines Javatool entwickelt das PNummer.bmp durchnummerierte Bilder im gleichen Ordner als Image.bin / test.h byte array konvertiert.

Wahlweise RGB8,RGB565, RGB24

Zum testen benutze ich die langsame Methode über das Imagefile im SPIFF, für den schnellen Bilderaufbau grösser 25fps benutze ich das Byte Array .. ein Bild mit 480x320px*3Bytes benötigt 80ms via 40Mhz SPI. Bei Bildern mit zum Beispiel 100×90 Pixeln werden im update 100FPS erreicht.

Downloadlink TFT-Tool

TFT_ESPI Example Script ILI9488:

Step5 Standard Dokumentation zu HTML Parser

Neue Version V1.0.8 .. ADD: Fast alle Daten-Operanden hinzugefügt DD,DW,MW etc..

Download:S5ParserV1-0-8

 

Achtung, es wird nur Java ab Version 7 mit aktuellen Updates unterstützt, auch nicht mehr offiziell unterstützte Betriebssysteme wie WinXP werden Umwandlungsfehler verursachen.

Der Step5 Doku Parser ermöglicht es die reine Standard Text Dokumentation (nicht komfortausgabe) aus Step5 in ein Html-Dokument umzuwandeln um dieses auf dem Smartphone wie auch auf jedem PC im Browser anzuzeigen.

Optional kann man die Zuordnungsdatei angeben das diese als Split-Bildschirm angezeigt wird.

Alle Netzwerke und Operanden werden in eine Temporäre Speicher-Datenbank eingelesen.. daraus werden dann für alle Operanden Verweise auf das nächste Netzwerk in dem diese vorkommen erstellt. Wenn man Die FB-Dokumentation an die PB Dokumentation anhängt, werden vorkommen von Operanden auch dort weiterverlinkt und in den Mouse-Over Listen angezeigt.

Es werden als Tooltip ebenso Querverweislisten bei MouseOver über den Operanden angezeigt.

Die Nutzung der Software erfolgt ohne Gewähr und ohne Zusicherung einer bestimmten Funktion.

Changelog

Neue Version V1.0.7 .. FIX: MeRker mit mehreren Nullen wurden mit 2 Punkten verlinkt

Neue Version V1.0.6 .. FIX: Es werden jetzt alle Operanden gefunden.

Neue Version V1.0.5 .. Diverse kleinere Bugs die im Testdokument nicht auffielen behoben!  z.B. Fehlende Verweise, doppelte Netzwerke, fehlende Netzwerke.

Neue Version V1.0.4 .. Unterstützung von NEUEN Bausteinen OB,FB,FX,SB (Diverse GRÖßere Bugs die im Testdokument nicht auffielen behoben)

Neue Version V1.0.3 .. Unterstützung von Funktionsbausteinen (Können für Verlinkungen an die PB Datei angehängt werden) Diverse kleinE Bugs behoben.

Version V1.0.2: Besseres LAyout FÜR verbesserte Bedienbarkeit 

DOWNLOAD: S5ParserV1-0-8

 

 

Arduino Taster Entprellung

Entprellung eines Tasters mit den Zeitoptionen Mindeste Druckzeit, Entprellzeit, Abtastrate (indirekte Entprellung).

 

MCP23017 Deustch

MCP 23017 Kurz und Bündig.
Allgemeine Register.

IODIR
Direction Register, bestimmt ob ein Pin Input oder Output ist.
1=Input, 0=Output

IPOL
Polaritätsregister, bestimmt die Polarität/Invertierung eines Pins
1=Invertiert, 0=nicht Invertiert

GPIO
InputOutput Register,
LESEN: Eingänge einlesen.
SCHREIBEN: wird ans OLAT Output Register weitergeleitet.
0=LOW, 1=HIGH

OLAT
Output Latch Register,
SCHREIBEN: Setzt die Ausgänge der als Ausgang definierten Pins.
LESEN: Gibt den zuletzt gesetzten Wert zurück.
0=LOW, 1=HIGH

GPPU
Pullup Register, aktiviert den Pullup am Pin.
1=HIGH, 0=LOW

Interrupt Register Konfiguration

Kleine Falle:
Die Interruptverwendung beinhaltet 3 Register. GPINTVEN, DEFVAL, INTCON welche alle 3 gesetzt werden müssen.
Wenn der Interrupt für einen Pin mit GPINTVEN aktiviert wird, entscheidet INTCON die Datenquelle des Signalvergleichs.
Wenn INTCON 0 ist, wird der Pin mit dem in DEFVAL gesetzten Signal 0/1 verglichen,
sollte INTCON 1 sein wird auf den letzten Pin Status verglichen.

INTERRUPT LOGIK:

Wenn ein Interrupt generiert wird werden die aktuellen Pin Werte in das INTCAP Register gesichert. Der Interrupt wird gelöscht wenn das LSB Byte beim Lesen der Register GPIO oder INTCAP übertragen wurde.

GPINTEN
InterruptOnChange Event Register, Aktiviert den Interrupt für einen Pin.
1=Aktiv, 0=Inaktiv

INTCON
Interrupt Control Register, bestimmt die Quelle der Interrupt On Change Quelle
1= Vergleich auf das DEFVAL Register,0= Letzten Status des Pins

DEFVAL
Default Value Register, bestimmt den Standard Vergleichswert des Pins wenn INTCON=1
1= HIGH, 0=LOW

Interrupt Register Status/Information

INTF
Interrupt Flag Register, beinhaltet den Status der Interruptauslösung.
1=Interrupt ausgelöst, 0=Kein Interrupt vorhanden

INTCAP
Interrupt Capt Register, Speichert den Wert des letzten Pin Status bei Interrupt Auslösung.
1=HIGH, 0=LOW

Allgemeine Konfiguration

IOCON
Zwischen Port A und B geteiltes Konfigurationsregister

Bit7: BANK, entscheidet die Sortierung der IO Register,
1=Zuerst alle A Register, danach alle B register
0= Beispiel, GPIOA,GPIOB,IPOLA,IPOLB

Bit6: MIRROR,
1=A und B teilen sich beide Interrupt Pins INTA und INTB
0=INTA ist für A und INTB für B

Bit5: SEQOP, Sequentielles Lesen/Schreiben
1= Deaktiviert
0=Aktiviert

Bit4: DISSLW, i2C Slew Rate Clock Stretching Ein/Ausschalten
1=Deaktiviert
0=Aktiviert

Bit3: HAEN: Address Pins aktivieren/Deaktivieren
1=Aktiviert0=Deaktiviert

Bit2: ODR Konfiguration INTA, INTB Open-Drain Option
1=Open-Drain
0=Aktiver Treiber

Bit1: INTPOL Interrupt PIN Polarität, Invertiert die Interrupt Pins.

Bit0: Nicht benutzt.

Einfache Genaue Messungen mit Mikrocontrollern (Teil1)

Referenz-Signal

Als erstes benötigen wir ein Referenz-Signal, wozu brauchen wir das überhaupt?

Die Mikrocontroller werden üblicherweise von Quarzen getaktet, hier in den Beispielen nehmen wir ein 16Mhz Standard an. Normalerweise benötigt man die normalen Quarze, diese reichen für normale Taktungen und Kurzzeitmessungen im Nano/Mikrosekunden Bereich auch aus. Das eigentliche Problem tritt erst auf wenn man Sekunden oder sogar Stunden auf eine Millisekunde genau messen möchte, hier addieren sich die Messfehler dann auf.

Aber wieviel ist das?

Dazu benutze ich ein GPS-Empfänger für knapp 8€, dieser bekommt durchgehend von allen Empfangenen Satelliten ein Mikrosekunden Zeitstempel in Weltzeit mit der genauigkeit einer Atomuhr (Die wirklich in jedem Satellit vorhanden ist).

Durch eine eigene hohe Taktung kann das Empfängermodul aus den Empfangenen Daten der Satelliten die Lokalzeit in Millisekunden fast Nanosekundengenau berechnen. Wir machen uns zum Vorteil das jedes Modul ein PPS „Pulse Per Second“ Impuls an einem Pin ausgibt! Bei einem NEO-6M Modul ist dieser Impuls auf 60Nanosekunden genau Langzeitsynchronisiert, das bedeutet das solange wir diesen Puls Empfangen und zählen .. der Abstand der gezählten Impulse den Sekunden entsprechen und das auf 60ns genau.

Praktisch heißt das, wir können mit einem Mikrocontroller als Referenz andere Impulse zwischen zwei PPS Impulsen zählen und können so auf 30-60ns Genau Frequenzen im Mhz Bereich auf 1Hz genau messen.

 

Beispiel:

Man kauft sich ein fertiges Breadboard mit angegebenem 16MHz Resonator/Quarz.. Dank der Messung mit dem PPS Impuls stellt man dann fest das dieser im Schnitt nur 15,95MHz und das auch noch schwankend taktet. Das bedeutet immerhin das für den Mikrocontroller 1 Sekunde nur 997 Millisekunden lang ist und dieser nach 20 Minuten und 1200 Sekunden meint es wäre fast 4 Sekunden später usw usw!

Eine schlechte Stopuhr gegen eine Digitale Armbanduhr mit genauen Sekunden.. dabei hat man sich das ja so gut ausgedacht..

 

 

 

 

 

RPi Starwars Uhr mit Internetradio

43176914545393888441054441454726041099

Eine kleine RPi-Zero (5€ Minicomputer) Uhr die die aktuelle Uhrzeit in der Mitte anzeigt und bei Wechsel wie im StarWars Vorspann raus und wieder einfliesst.

Wenn man Internetzeit als Sync benutzen möchte kann man auch gleich ein Internetradio daraus bauen, ansonsten bieten sich Diverse RealTimeClocks an.

Das ganze basiert auf einem Headless-Linux (ohne HDMI Bildschirm und Grafik) Debian Wheezy mit installiertem Java8 und einer JavaFX Animation. Das Elektronik SPI-Interface Display ist über die IOs mit dem FBTFT Framebuffer Treiber eingebunden.

Als Internetradio App habe ich MPD ohne Grafikoberfläche gewählt, dafür gibt es viele Apps in den Android und IPhone Stores.

  • Basiert auf Rapbian Wheezy ohne DesktopManager, deinstalliertem LightDM, Java8FX Engine schreibt JavaFX direkt in den Framebuffer.

    Gute Anleitung als Grundlage, im Endeffekt einfach zu lang http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/RaspberryPiFX/raspberryfx.html

    EDIT /boot/config.txt ähnlich:

     

  • 2

    Installiere fbcp um den Main Framebuffer zum LCD-Framebuffer zu kopieren.

  • 3

    Erstelle start.sh zum Beispiel:

     

    Update Kernel mit rpi-update:

  • 5

    Downloade Java8 JDKu71 für ARM und extrahiere die Dateien. Exportiere gegebenfalls Deinen Javapath  EXPORT PATH zu opt/jdkXXX/bin

  • 6 Kompiliere das StarWars JavaFX Script und kopiere das Hintergrundbild StarWars.jpg in den gleichen Ordner /Projektpfad :
  • 7

    Die Uhr mit dem Raspi starten:

     

 

 

Rpi Headless Osmc, SPI Display mit fbtft im Framebuffer beschreiben RGB 65k

Einfaches Snippet das einen im Binärfile hinterlegten BMP Font(RGB565) im Framebuffer scrollt. Jeder Buchstabe hat in der Datei seinen Startblock Ascii-Code*Width*Heigth und jede Fontgröße wiederum ihren Startblock. (Gepackt mit einem kleinen Tool für Grafiken in SPI-Flashes)

mywindows

Als Grundlage installiert man rpi-update mit integriertem fbtft und aktiviert SPI.

Dann kann man zB. für das kleine HY28B display folgend Treiber laden:

modprobe dma fbtft

modprobe fbtft_device name=hy28b fbtft_device.speed=10000000 fbtft_device.rotate=90 fbtft_device.mode=3