Arduino Plugin in Eclipse aktivieren

Folgende Programme werden benötigt:

Ich habe beide Pakete (Arduino IDE + Eclipse) in meinem Homesverzeichnis in den Unterordner Tools entpackt.

Damit der User auch Zugriff auf den Arduino hat sollte er den Gruppen tty und uucp hinzugefügt werden:

sudo usermod -a -G tty,uucp shellmann

Danach start man eclipse. Dort muss nun das Plugin installiert werden:

Help => Install New Software

install_pluginHier muss man auf Add klicken.

install_plugin2Die Daten für das Repository wie oben abgebildet eingeben
(URL: http://www.baeyens.it/eclipse/V2)

 install_plugin3Nun kann das Repository über die Drop Down Liste ausgewählt werden.
ACHTUNG: Unten müssen auch die Haken passend gesetzt werden.

Das Plugin kann nun installiert werden. Eclipse muss anschliessend neu gestartet werden. Bei mir kam aber z.B. beim Zugriff auf den “Serial Monitor”  noch eine Fehlermeldung:

java.lang.UnsatisfiedLinkError: Can't load library: /home/user/tools/arduino/lib/librxtxSerial64.so
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1854) at java.lang.Runtime.load0(Runtime.java:795)
at java.lang.System.load(System.java:1062) at it.baeyens.arduino.common.Common.LoadRXTX(Common.java:528)
at it.baeyens.arduino.ui.ArduinoPreferencePage$1.widgetSelected(ArduinoPreferencePage.java:248)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
...

Dafür musste ich das Paket dev-java/rxtx nachinstallieren und in den entsprechenden Ordner verlinken.

sudo ln -s /usr/lib64/rxtx-2/librxtxSerial-2.2pre1.so ~/tools/arduino/lib/librxtxSerial64.so

UPDATE:
Alternativ kann man die librxtxSerial auch noch /lib linken:

sudo ln -s /usr/lib64/rxtx-2/librxtxSerial-2.2pre1.so /lib/librxtxSerial64.so

Erste Gehversuche mit dem Arduino und einem HD44780 mit i2c Adapter

Meine ersten Gehversuche mit Arduino waren eher kläglich. Anscheinend habe ich mir eine nicht so ganz einfach Sache vorgenommen:

Der Uno sollte ein 4*20 HD44780 LCD über einen i2c Adapter ansprechen. Wie sich im Nachinein herausgestellt hat, gibt es wohl unterschiedliche Adapter, die dann auch unterschiedlich angesprochen werden.

Zuerst aber mal die Verdrahtung:

i2c Adapter Arduino
GND GND
VCC 5V
SDA A4
SCL A5

Als Software wird folgendes benötigt:

WICHTIG: Die Liquid Crystal Library ersetzt die von Arduino vor installiert. d.h. im Ordner libraries der Arduinoinstallation muss zuerst der Ordner LiquidCrystal gelöscht werden. Anschließend wird der gleichnamige Ordner aus dem Liquid Crystal Library Paket dorthin kopiert.

Danach müssen wir zuerst einmal die Adresse des Displays herausfinden. Dazu können wir folgenden Code nutzen. Erklärungen dazu gibt es hier.

Mein kleiner Freund mit der “vielsagenden” Bezeichnung UC-146 hat anscheinend die “default” Adresse 0x27.

IMG_20150529_195841

Anschließend kann man mit folgendem Code Text zum Display schicken:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// define variables
#define I2C_ADDR 0x27

// Set the pins on the I2C chip used for LCD connections:
//                    addr,    en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(I2C_ADDR, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

// setup
void setup()
{
  lcd.begin(20,4);    // initialize the lcd for 20 chars 4 lines and turn on backlight
  lcd.backlight();   // finish with backlight on
}

void loop()
{
  lcd.setCursor(3,0);
  lcd.print("Hello, world!");
  lcd.setCursor(0,1);
  lcd.print("--------------------");
  lcd.setCursor(1,3);
  lcd.print("http://pcspinnt.de");
}

IMG_20150529_210814

Der Code ist bewusst sehr simpel gehalten. Das eigentlich spannende ist diese Zeile:

LiquidCrystal_I2C lcd(I2C_ADDR, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

Hier erklärt die Doku der Liquid Crystal Library sehr gut, wofür diese Werte stehen:

Class constructor. Initializes class variables and defines the I2C address of the LCD. The constructor does not initialize the LCD.

Parameters:
lcd_Addr[in]    I2C address of the IO expansion module. For I2CLCDextraIO, the address can be configured using the on board jumpers.
En[in]    LCD En (Enable) pin connected to the IO extender module
Rw[in]    LCD Rw (Read/write) pin connected to the IO extender module
Rs[in]    LCD Rs (Reset) pin connected to the IO extender module
d4[in]    LCD data 0 pin map on IO extender module
d5[in]    LCD data 1 pin map on IO extender module
d6[in]    LCD data 2 pin map on IO extender module
d7[in]    LCD data 3 pin map on IO extender module

Die Pin Belegung des Displays dazu im Vergleich:

01 	GND
02 	+5V
03 	Contrast
04 	RS
05 	RW
06 	E
07 	Data 0
08 	Data 1
09 	Data 2
10 	Data 3
11 	Data 4
12 	Data 5
13 	Data 6
14 	Data 7
15 	+5V
16 	GND

Eine große Hilfe war diese Seite. Hier sind auch die verschiedenen i2c Adapter incl. entsprechendem Code erklärt.

Make your prompt ($PS1) more functional

This is a very simple prompt with only different colors:

PS1="\[\e[0;37m\][\[\e[0;32m\]\u\[\e[0;37m\]@\[\e[0;33m\]\h\[\e[0m] "

snapshot-2014-03-31-23-01-35
Some scripting foo to get a different color for root (for better readability split into multiple lines):

PS1=""
# add user
if [[ ${EUID} == 0 ]]; then 
        PS1+="\[\e[0;31m\]\u"
else
        PS1+="\[\e[0;32m\]\u"
fi
# add @ + host
PS1+="\[\e[0;37m\]@\[\e[0;33m\]\h "

snapshot-2014-03-31-23-31-47
Now adding some brackets and the working directory:

# opening brackets
PS1="\[\e[0;37m\]["
# add user
if [[ ${EUID} == 0 ]]; then 
        PS1+="\[\e[0;31m\]\u"
else
        PS1+="\[\e[0;32m\]\u"
fi
# add @ + host
PS1+="\[\e[0;37m\]@\[\e[0;33m\]\h"
# add working dir
PS1+="\[\e[0;37m\]:\[\e[01;34m\]\w"
# closing brackets + reset 
PS1+="\[\e[0;37m\]]\e[0m "

snapshot-2014-03-31-23-28-33
Now some functionall things.
I’m using the prompt_command to add last exit code to my prompt. Short descriptione from the bash man page:

PROMPT_COMMAND
If set, the value is executed as a command prior to issuing each
primary prompt.

Adding last exit code:

function prompt () {
        exitcode=$?
        # add exit code
        PS1=" "
        if [ $exitcode == 0 ]; then
                PS1+="\[\033[01;32m\]\342\234\223"
        
        else
                PS1+="\[\033[01;31m\]\342\234\227"
        fi

        PS1+="$exitcode "
        # opening brackets
        PS1+="\[\e[0;37m\]["
        # add user
        if [[ ${EUID} == 0 ]]; then
                PS1+="\[\e[0;31m\]\u"
        else
                PS1+="\[\e[0;32m\]\u"
        fi
        # add @ + host
        PS1+="\[\e[0;37m\]@\[\e[0;33m\]\h"
        # add working dir
        PS1+="\[\e[0;37m\]:\[\e[01;34m\]\w"
        # closing brackets + reset 
        PS1+="\[\e[0;37m\]]"
        # reset color
        PS1+="\e[0m "
}
PROMPT_COMMAND='prompt'

snapshot-2014-03-31-23-46-21

Combinig all this stuff with one of my last posts, it could look like this:

function prompt () {
        exitcode=$?
        # add exit code
        PS1=" "
        if [ $exitcode == 0 ]; then
                PS1+="\[\033[01;32m\]\342\234\223"
    
        else
                PS1+="\[\033[01;31m\]\342\234\227"
        fi  
    
        PS1+="$exitcode "
        # opening brackets
        PS1+="\[\e[0;37m\]["
        # add user
        if [[ ${EUID} == 0 ]]; then 
                PS1+="\[\e[0;31m\]\u"
        else
                PS1+="\[\e[0;32m\]\u"
        fi  
        # add @ + host
        PS1+="\[\e[0;37m\]@\[\e[0;33m\]\h"
        # add working dir
        PS1+="\[\e[0;37m\]:\[\e[01;34m\]\w"
        # closing brackets + reset 
        PS1+="\[\e[0;37m\]]"
        # display git branch
        if [ -f /usr/bin/git ]; then
                branch="$(git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ \(\1\)/')"
                PS1+="$branch"
        fi  
        PS1+=" \$"
        # reset color
        PS1+="\e[0m "
}
PROMPT_COMMAND='prompt'

snapshot-2014-04-01-00-05-11

bash history and a lot of terminals

If you are using many terminals you know the problem, that the bash_history is only written after logging out. So if you want to share commands between two terminals you have to copy and paste them.

Reading the bash man page i found the PROMPT_COMMAND:

PROMPT_COMMAND
    If set, the value is executed as a command prior to issuing each primary prompt.

With this little guy it’s easy. Simple write this to your .bashrc and commands will be written directly to your history:

export PROMPT_COMMAND='history -a'

Howto show git branch in bash prompt

This is my normal bash prompt:
prompt
The corresponding variable:

PS1='\[\033[0;36m\][\[\e[0;32m\]\u\[\e[0;37m\]@\[\e[0;33m\]\h:\[\e[0;35m\]\w\[\e[0;36m\]]\[\e[0;40m\]\$\[\e[0;37m\] '

To add the git branch, you have to put these lines in your ~/.bashrc:

function parse_git_branch {
        git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ \< \1\> /'
}
PS1='\[\033[0;36m\][\[\e[0;32m\]\u\[\e[0;37m\]@\[\e[0;33m\]\h:\[\e[0;35m\]\w\[\e[0;36m\]]\[\e[0;40m\]\[\033[1;34m\]$(parse_git_branch)\[\033[1;37m\]\$\[\e[0;37m\] '

Now it will show the branch in a git directory:
prompt_branch

Server-“Umzug”

Dieses Wochenende habe ich mich mal wieder ein wenig mit meinem Server beschäftigt. Da der Wartungsaufwand immer mehr und die Zeit immer knapper wurde, habe ich mich entschlossen nun doch Debian zu installieren. Hinzu kam, dass die Jails (7 Stück) zum Schluss eine hohe Last erzeugt haben und der Server damit gut beschäftigt war.

D.h. aber nicht, dass ich FreeBSD nicht weiter im Auge behalten werde. Es ist nach wie vor ein cooles OS mit einer Menge interessanter Ansätzen.

Mit dem Umzug sind auch ein paar neue Features hinzugekommen:

* alle Dienste sind vollständig auch über IPv6 erreichbar
* das Zertifikat wurde erneuert und gegen eins mit mehreren “CN’s” ausgetauscht:

...
X509v3 Subject Alternative Name:
DNS:*.pcspinnt.de, othername:<unsupported>, DNS:*.pc-spinnt.de, othername:<unsupported>, DNS:*.hellmann-it.de, othername:<unsupported>
...

Geplant ist auch noch ein VPN Server, damit ich zu Hause auch echts IPv6 bekomme. Die generellen Arbeiten sollten eigentlich abgeschlossen sein…hoffe ich zumindest.

Lazy admins using the shell (third one)

Another thing i always use, is a separate file for my aliases, functions etc. I always call this file .bash_common. To use it just source it in your .bashrc:

...
. ~/.bash_common
...

This is my .bash_common: show

Older Posts:

Lazy admins… the second one
Lazy admins using the shell