Connect Raspberry Pi & Arduino USB bidirectional

How to connect an Arduino to a raspberry pi via USB bidirectional.

The raspberry reads all from the serial and prints it. Next it reads a textile from a webpage and sends the text (one word) to serial, next a random car to the Arduino. Arduino got a LCD attached and shows the data it got via serial. It sends back the seconds it run and a string. The example is at this time without real use, it is just for testing the bidirectional serial connection.

Using Python on the raspberry side. Change the port to what you find out:

import serial
import time
import random
import urllib2
import feedparser
 
def read_all(port, chunk_size=200):
    """Read all characters on the serial port and return them."""
    if not port.timeout:
        raise TypeError('Port needs to have a timeout set!')

    read_buffer = b''

    while True:
        # Read in chunks. Each chunk will wait as long as specified by
        # timeout. Increase chunk_size to fail quicker
        byte_chunk = port.read(size=chunk_size)
        read_buffer += byte_chunk
        if not len(byte_chunk) == chunk_size:
            break

    return read_buffer
#end def

cars = ["Ford", "Volvo", "BMW", "VW"]

ser = serial.Serial(
    port = '/dev/ttyACM0',
    baudrate = 9600,
    parity = serial.PARITY_NONE,
    stopbits = serial.STOPBITS_ONE,
    bytesize = serial.EIGHTBITS,
    timeout=0.5, # IMPORTANT, can be lower or higher
    )

#s = serial.Serial('/dev/ttyACM0', 9600) # Namen ggf. anpassen
#s.flushInput()
#s.open()

time.sleep(2) # der Arduino resettet nach einer Seriellen Verbindung, daher 

ser.write("xyx")


d = feedparser.parse('http://www.reddit.com/r/news/.rss')
dlen = len(d['entries'])
dnr = 0
try:
    while True:
        nb = "01234567890123456789012345678901"
        text = "nn.mm"
        data_str = []
        data_str = read_all(ser)
        print(data_str) 
        #nb = raw_input('Choose it: ')
        #nb = cars[random.randint(0,3)] + "x"
        try:
            #nb = d['entries'][dnr]['title'].encode('utf-8').strip() + "x"
            nb = d['entries'][dnr]['title'].encode('utf-8').strip() 
            dnr += 1 
            if (dnr > dlen -1):
                d = feedparser.parse('http://www.reddit.com/r/news/.rss')
                dlen = len(d['entries'])
                dnr = 0
            #ser.write(nb)
        except:
            print("fehler1")
        try: 
            response = urllib2.urlopen('http://4johannes.de/weather/lowest.txt')
            text = response.read().strip()
            print(text)
        except:
            print("fehler2")
        ll = len(text)
        text2 = text + " " + nb[0:33-ll] + "\n"
        #print(text2)
        #ser.write(text2)
        #time.sleep(5)
        #text2 = nb[16-ll:33-ll] + "y"
        print(text2)
        print(nb)
        ser.write(text2)
        time.sleep(5)
except KeyboardInterrupt:
    ser.close()

And this is the Arduino part:

/*********************

Example code for the Adafruit RGB Character LCD Shield and Library

This code displays text on the shield, and also reads the buttons on the keypad.
When a button is pressed, the backlight changes color.

**********************/

// include the library code:
#include <Wire.h>
#include <Adafruit_RGBLCDShield.h>
#include <utility/Adafruit_MCP23017.h>


// The shield uses the I2C SCL and SDA pins. On classic Arduinos
// this is Analog 4 and 5 so you can't use those for analogRead() anymore
// However, you can connect other I2C sensors to the I2C bus and share
// the I2C bus.
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();

// These #defines make it easy to set the backlight color
#define RED 0x1
#define YELLOW 0x3
#define GREEN 0x2
#define TEAL 0x6
#define BLUE 0x4
#define VIOLET 0x5
#define WHITE 0x7

byte nr;
char myString[] = "Hello MArius";
String readString;
long previousMillis = 0;
long interval = 1000;

void setup() {
// Debugging output
Serial.begin(9600);
// set up the LCD's number of columns and rows: 
lcd.begin(16, 2);

// Print a message to the LCD. We track how long it takes since
// this library has been optimized a bit and we're proud of it :)
int time = millis();
lcd.print("Hello, Marius!");
time = millis() - time;
//Serial.print("Took "); Serial.print(time); Serial.println(" ms");
lcd.setBacklight(WHITE);
lcd.setCursor(0, 1);

}

uint8_t i=0;
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
//lcd.setCursor(0, 1);
// print the number of seconds since reset:
//lcd.print(millis()/1000);


unsigned long currentMillis = millis();

if(currentMillis - previousMillis > interval) {
// save the last time you blinked the LED 
previousMillis = currentMillis;
//do nothing at the moment 
//Serial.println(millis()/1000);

}

nr = 1;

if (Serial.available() > 0) {
//nr = Serial.read();
//myString = Serial.readln();
//Serial.print("Folgender char wurde empfangen: ");
//Serial.println(nr, DEC);

char c = Serial.read(); //gets one byte from serial buffer
readString += c; //makes the string readString
//lcd.setCursor(5,1);
//lcd.print(readString);
//lcd.print(c);
//readString = "";

if (c == 'x') {
lcd.setCursor(0,1);
lcd.print(" <");
lcd.setCursor(0,1);
lcd.print(readString);
Serial.println(millis()/1000);
Serial.println("x/n");
readString = "";

}

}

uint8_t buttons = lcd.readButtons();


if (buttons) {
lcd.clear();
lcd.setCursor(0,0);
if (buttons & BUTTON_UP) {
lcd.print("UP ");
lcd.setBacklight(RED);
}
if (buttons & BUTTON_DOWN) {
lcd.print("DOWN ");
lcd.setBacklight(YELLOW);
}
if (buttons & BUTTON_LEFT) {
lcd.print("LEFT Marius");
lcd.print(nr);

lcd.setBacklight(GREEN);
}
if (buttons & BUTTON_RIGHT) {
lcd.print("RIGHT Paulina");
lcd.setBacklight(TEAL);
}
if (buttons & BUTTON_SELECT) {
lcd.print("SELECT ");
lcd.setBacklight(VIOLET);
}
}
}

Postgresql – Tipps and Tricks

Using PLSQL for setting Grants:

 

CREATE OR REPLACE FUNCTION set_all_sq_grants() RETURNS SETOF TEXT AS
$BODY$
DECLARE
r record;
BEGIN
FOR r IN
SELECT sequence_name, sequence_schema FROM information_schema.sequences WHERE sequence_schema = 'xxx'
LOOP
-- can do some processing here
EXECUTE ' Grant all on ' || r.sequence_schema || '.' || r.sequence_name || ' to userXY' ;
--RETURN NEXT r; -- return current row of SELECT
END LOOP;
RETURN;
END
$BODY$
LANGUAGE plpgsql;

— und ausführen
select xxx.set_all_sq_grants();

more about Postgres PLSQL: Fun with Functions.

 

 

Text to UML and others

Was searching for tools for documentation, doing graphics out of Text:

Very good summary link: Text to UML.

Most features: Planttext

Clean and easy, Sequence and FlowChart: http://chartmage.com/index.html

Also very fast to use: http://www.nomnoml.com

And one for ERM: https://app.quickdatabasediagrams.com

One more https://start.jhipster.tech/jdl-studio/

 

 

Münchens super geheime Einkauftipps

Johannes’ München Schnäppchenfinder

Hier eine Sammlung meiner Geheimtipps für Münchenbesucher.

Dr. Schnell Reinigungsmittel für Profis, kleiner Outlet-Store auch für Amateure. Hier wird das Zeugs hergestellt, das immer auf den Putzwägen steht. Gut und besser als das beworbene Consumer Zeugs. Extra-Tipp: Milizid: Gegen Kalk, Gastro-Pur: Gegen Fett. – Wirkt Hammer, aber Handschuhe anziehen! Taunusstraße 19, Mo – Do von 8 bis 17 Uhr / Fr von 8 bis 14 Uhr

Spina Italienischer Feinkost (Groß-) Händler, eine gigantische Wein- und Nudelauswahl. Aber auch so ziemlich alles an italienischen Lebensmitteln (Öle, Fische, Brot, Süßigkeiten ….). Und dazu noch günstig! Extra-Tipp: Tomaten aus der Dose, 10 mal besser als was in D verkauft wird. Maria-Probst-Str. 49, Montag – Freitag: 08.30 – 18.00 Uhr,
Samstags: 07.30 – 14.00 Uhr

Maerz:  Sehr hochwertige (und hochpreisige) (Woll) Strickwaren, Outlet, Bayerwaldstr. 7, 81737, Mo – Fr 11 – 18 Uhr, Sa 9.30 – 14 Uhr

Amazon Drive Nutzung – Welche Dateien sind erlaubt?

Nachdem Amazon die unbeschränkte Nutzung des Amazon Drives eingeschränkt hat, kündige ich halt meinen Plan und nutze die in Prime kostenlose Foto Funktion.

Nach einem wahnsinnig langen try and error habe ich jetzt (einigermaßen) eine Liste der Dateien, die erlaubt sind:

*.jpg; *.JPG; *.CR2; *.ORF; *.tff; *.tif; *.jpeg; *.JPEG; *.dng; *.RW2; *.gif; *.GIF; *.png; *.PNG; *.bmp; *.BMP

Was bei mir nicht erkannt wird sind meine .RAW Dateien aus meiner Panasonic Kamera!

Stichwort: Prime Photos Plan, Prime Photos, allowed, not allowed

NIU Gepäckträger Tuning

Der Niu wurde angeschafft um möglichst schnell etwas zu besorgen, oder ein Kind irgendwo hin zu bringen. Im ersten Eintrag habe ich geschrieben, dass er das sehr gut kann. Was aber etwas stört, ist die geringe Gepäck/Einkaufsunterbringmöglichkeit. Zum Eislauftraining brauchen wir Schlittschuhe, Helm, Schützer, Trinkflasche, meinen Kaffee ;-), meine Kamera. Es gibt nen kleinen Stauraum unter der Sitzbank, das reicht aber nicht weit.  Als Zubehör gibt es Gepäckträger und Koffer, aber der Koffer war mir zu klein bzw. unflexibel. Am Radl habe ich das KLICKfix System im Einsatz und finde das gut durchdacht. Die Idee war es nur den NIU-Gepäckträger zu bestellen und zu probieren ob dass KlickFix System sich auch für den Roller eigenet. Um nicht zusätzliche Löcher in Gepäckträger oder KlickFix bohren zu müssen, sah ich ein Brett als Zwischenadapter vor. Ich hatte es erst längs, montiert, merkte aber dass der Überhang nach hinten zuviel wird (und teilweise anfängt das Rücklicht zu verdecken) und dann noch mal umgebaut und quer montiert. Als Anhaltspunkt so, dass der bereit vorhanden Einkaufskorb mittig befestigt ist. Neben dem Korb habe ich noch ne Thermobox bestellt, für a) gekühltes und b) warmes Essen holen. Warum b) bei den vielen Lieferdiensten? Weder die Holzofenpizza noch die Burritos noch der Döner liefern zu uns, so muss man sich selber drum kümmern 😉 Wie kann man beliebeige Boxen befestigen? Es gibt extra einen Aufnehmer für das KlickFix System. Bei der Thermobox ist darauf zu achten, den nicht zu fest anzuziehen ….

Zufrieden? Es läuft. Klappt sehr gut bisher. Beim Einkaufen der Korb abnehmen und mit in Laden nehmen passt. Nach dem Einkauf wieder draufsetzen, schneller geht’s nicht. Nur Achtung, wohl verpacken ist angesagt, der Fahrtwind ist wesentlich höher als beim Radl. Und noch ein Punkt: Sitzt ein Kind mit Ranzen auf dem Rücken hinten wird es doch etwas eng. – Und die Thermobox? Einmal getestet …. so warm kam noch nie eine Pizza an.

Mein NIU Elektro Roller

Am 21.11.2017 habe ich den Roller bei GreenCity am Nordbad abgeholt. Er stand zwar schon eine Woche früher da, aber es war in der Stadt kein Versicherungskennzeichen mehr aufzutreiben, so dass ich online eines bestellen musste.

Die Motivation

Fahrten in die nähere Umgebung nehmen drastisch zu, wenn die Kinder älter werden. Hauptsächlich wären hier Schule und Sport zu nennen. Zwar nutzen wir ÖVP, Rad und Auto, aber diese Verkehrsmittel  sind auch mit Nachteilen behaftet. Ein Beispiel ist der Weg  zur Eishalle. Nur 2 km entfernt muss man öffentlich einmal umsteigen. Mit dem Auto ist der Parkplatz zu teuer oder man bekommt erst gar keinen, wenn eine Veranstaltung ist. Rad ist eine Alternative, wenn man genug Zeit hat. – Ein Roller ist hier die ideale Ergänzung, und mit einer Reichweite von 50 km wollte ich ausprobieren ob elektrisch die bessere Alternative darstellt.

Warum der NIU?

Eine kleine Einführung in das Thema war der WISO Bericht vom 14.08.2018. Weit umfangreichere Info, wie oft, im passenden Forum. Insgesamt das derzeit stimmigste Angebot, obgleich mir die/einige Mitbewerber optisch besser gefallen hätten.

Die ersten 150 km im Winter, erste Erfahrungen

Viel Freud wenig Leid, die Erfahrungen entsprechen ziemlich den Berichten im Web. Gute Bedienung, gute Straßenlage, halbwegs bequem und sehr gute Bremsen. Abzüge in der B-Note für klapprige Sitzbank, zu kleinem Haken, etwas zu kleinem “Kofferraum” und zu wenig Stauraum. Laden problemlos, ich nahm den Akku immer mit rein. Man hätte das Kabel etwas geschickter platzieren können, aber mei. Es war jetzt wirklich zu kalt für längere Touren, aber den Kaufgrund, Junior ins Training bringen, erfüllte er bisher mit Bravour.

Stand heute 25.01.2018, würde ich ihn nochmals kaufen: Ja.

Das Stauraum Problem habe ich gelöst, siehe den nächsten Blogeintrag ….

… More to come as Times goes on

Weitere links

http://www.myniu.org