[RaspiPi] RF24 Radio Link between 2 Raspberry Pis

Hi there,

awesome coder TMRh20 did write some cool librarys for the widely used RF24 radio modules.
These tiny things work with SPI and thanks to TMRh20s work, you can use them quite easily to connect two RPis.
You can find his/her Github on https://github.com/TMRh20, as well as a lot of good documentation on his/her blog http://tmrh20.blogspot.de/ and github.io http://tmrh20.github.io/

To make it short and connect to RPis, this is my reciepe, worked out with TMRh20 - Thanks a lot!

1.) You should connect the RF24 modules to your two RPis like shown here:
https://github.com/TMRh20/RF24Network/tree/Development#connection-info
I did not change anything in the config but did just connect the modules like mentioned in the table:

Pins:

PIN -- NRF24L01 -RPI --------- RPi -P1 Connector
1 ---- GND ----- rpi-gnd ----- (25)
2 ---- VCC ----- rpi-3v3 ----- (17)
3 ---- CE ------ rpi-gpio22 -- (15)
4 ---- CSN ----- rpi-gpio8 --- (24)
5 ---- SCK ----- rpi-sckl ---- (23)
6 ---- MOSI ---- rpi-mosi ---- (19)
7 ---- MISO ---- rpi-miso ---- (21)
8 ---- IRQ ---- - ------------- -

2.) Install dependencies:
sudo apt-get install libboost1.50-all

3.) Install RF24toTUN on all RPis
mkdir rf24
cd rf24
wget http://tmrh20.github.io/RF24Installer/RPi/install.sh
chmod +x install.sh
sudo ./install.sh

Do you want to install the RF24 core library, Y/N?Y
Do you want to install the RF24Network library?Y
Do you want to install the RF24Mesh library?Y
Do you want to install the RF24toTUN library?Y
Do you want to compile RF24toTUN with RF24Mesh support?N

cd rf24libs/RF24Network/

vi RF24Network_config.h
change #define MAX_PAYLOAD_SIZE
to #define MAX_PAYLOAD_SIZE 1514

sudo make install -B

cd ..
cd RF24toTUN/

vi rf24totun.cpp
goto line 209: while(!radioTxQueue.empty() ) { // && !radio.available() ) {
and change it to: while(!radioTxQueue.empty() && !radio.available() ) {

sudo make install -B

4.) Use the Tunnel on both RPis (you're in the RF24toTUN folder :)!):
Node 1, Master:
sudo rf24totun_configAndPing.sh 1 2
answer 0 for Master
got now IP: 192.168.1.1

Node 2, Client:
rf24totun_configAndPing.sh 2 1
answer 1 for Client
got now IP: 192.168.1.2

After that you can ping each other, even with -s100 for 108 bytes payload, or use ssh and such.

Addition:
If you want to use the LAN/WAN Connection of the Master RPi from your Client, you need to do following:
a) Master Site:
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
# To forward and allow traffic, as mentioned here: http://tmrh20.github.io/RF24Ethernet/

b) Client Site:
sudo route add default gw 192.168.1.1 tun_nrf24
# Configure default gateway to the IP of your Master RPi and use the RF24 device to connect to it

[RaspPi] Raspberry Pi and the ili9341 Display

https://www.youtube.com/watch?v=cEcIem6R4aQ

1.) Enable SPI
# remove or comment out the spi blacklist line
sudo nano /etc/modprobe.d/raspi-blacklist.conf

2.) Install
a) FBTFT drivers as loadable modules
sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update
sudo shutdown -r now

OR

b) FBTFT drivers built into the kernel proper
sudo REPO_URI=https://github.com/notro/rpi-firmware BRANCH=builtin rpi-update
sudo shutdown -r now

3.) Install the frame buffer driver (as root):
apt-get install xserver-xorg-video-fbdev

4.) Configure frame buffer driver:
sudo vi /usr/share/X11/xorg.conf.d/99-fbdev.conf
Section "Device"
Identifier "myfb"
Driver "fbdev"
Option "fbdev" "/dev/fb1"
EndSection

5.) add Autostart:
( the gpios= Pins need to be changed to YOUR specification and connection! )
sudo vi /etc/modules
fbtft_device custom name=tm022hdh26 gpios=reset:25,led:23,dc:24 rotate=90 bgr=1
#on my selfbuild shield
#from usb -> sd card laengs
#fbtft_device custom name=tm022hdh26 gpios=reset:25,led:23,dc:24 rotate=180 bgr=1
#from cinch -> hdmi quer
#fbtft_device custom name=tm022hdh26 gpios=reset:25,led:23,dc:24 rotate=270 bgr=1

6.) add Auto login:
sudo vi /etc/inittab
#1:2345:respawn:/sbin/getty --noclear 38400 tty1
1:2345:respawn:/bin/login -f pi tty1 /dev/tty1 2>&1

7.) add Autostart X:
sudo vi /etc/rc.local
su -l pi -c "env FRAMEBUFFER=/dev/fb1 startx &"

8.) Console at boot
Add kernel argument to file /boot/cmdline.txt
fbcon=map:10

Infos taken from:
https://github.com/notro/fbtft/wiki#install
http://marcosgildavid.blogspot.de/2014/02/getting-ili9341-spi-screen-working-on.html

Video was played with this worm-of-a-command-string:
sudo mplayer -nolirc -vo fbdev2:/dev/fb1 -fs -x 320 -y 240 -zoom -framedrop -lavdopts lowres=1:fast:skiploopfilter=all ~/BadApple.avi

[RaspPi] Really poor mans DS18B20 Temperature Sensor

As I had to quickly come up with two DS18B20 Sensors for the Raspberry Pi, I decided to built them "quick and dirty" without any breadboard. It is not the most beautiful nor the best way, but it works out quite well. With one exception: It seems like the sensor is too near to the Pi and picks up heat from it :/. Anyway, here are some photos:

2014-03-24 15.22.32
That is how it would look like later.

2014-03-24 15.26.00
Adding some female header to the base. We need 5 Pins for that. The first pin is going to be connected to 3,3V, the fourth to the GPIO Pin 4 and the fifth to ground. So just cut the pins 2 and 3 from that header.

2014-03-24 15.26.21
Add an resistor to pull the Data Pin high to 3,3V. You should use an 4,7k Ohm, but anything between 4,7k - 10k Ohm should work out. I used an 10k Ohm here.

2014-03-24 15.27.08
Solder the two pins of the resistor to Pin 1 and Pin 4. Do NOT short with Pin 5!

2014-03-24 15.27.48
Add some silver wire to the fifth Pin.

2014-03-24 15.31.24
Solder the DS18B20 to the Pins. Watch out for the curved side of the Sensor, it has to face upwards!

2014-03-25 07.49.59
I choose to secure the whole sensor against short circuits and stuff with hot glue. Looks ugly, but does the trick.

2014-03-25 07.50.28
Last thing is installing the sensor in the left upper corner of the GPIO Pins of your Raspberry Pi.

After booting you have to activate the One Wire protocol like this:
sudo modprobe w1-gpio
sudo modprobe w1-therm

Then you can read your sensor by using this command:
cat /sys/bus/w1/devices/28*/w1_slave

If you want to get your reading nicely formatted, you should install bc with
sudo apt-get install bc

and use this code:
echo "`cat /sys/bus/w1/devices/28*/w1_slave | grep t | cut -d= -f2`/1000" | bc -l | awk '{printf "%.2f \n", $1}'

[RaspPi] OpenWRT Trunk with latest Raspberry Pi 3.10.32+ #648 Kernel – as Image download

As a lot of people asked for the OpenWRT / Raspberry Pi Images, I decided to make a new version which replaces the old one from this post ([RaspPi] OpenWRT Trunk with latest Raspberry Pi 3.10.18+ #585 Kernel – as Image download).

That said, the rules haven't changed:
- It is the trunk version of OpenWRT, injected with the latest Raspberry Pi Kernel
- opkg list does contain the current stable package list for the OpenWRT RPi port of the latest stable release and will work out of the box (opkg update, opkg install..) Most packages like apache should work out of the box – but kernel moduls could/will probably fail. I won’t build an package mirror and won’t build packages because of limitied time. Sorry!
- Other than the normal behavior, the RPi does use DHCP to get its IP Adress. To connect for the first time, use nmap to find your RPi in your network. (Then connect via telnet, set an password with passwd and you’re good to use SSH finally!)
- The main partition size has been changed from 48 MB to 64 MB – giving you additional space

You can just download and use the (7zip-ed) image here: rpi_openwrt_2.7z [ 6.1 MB ]

I WON'T BUILD PACKAGES!
This is for the fact that I neither got enough time, nor CPU power at hand.
Sorry :(!

[RaspPi] OpenWRT Trunk with latest Raspberry Pi 3.10.18+ #585 Kernel - as Image download

THIS POST IS OUTDATED! A NEW IMAGE HAS BEEN POSTED! PLEASE USE THE SEARCH FUNCTION TO FIND THE LATEST VERSION!

As I found out that the old tutorials weren't helpful and either the OpenWRT Trunk OR the Raspberry Pi Kernel broke the build process (you can still build it successfully, but you won't be able to use the RPi after boot!) - I sat down and found an new way. This time I don't let the kernel build by the OpenWRT enviroment, but insert an healthy and prebuilt one by the RPi Team ;)!

You can just download and use the (7zip-ed) image here: rpi_openwrt.7z [ 6.1 MB ]

There are several changes to the normal version:
- opkg list does contain the current stable package list for the OpenWRT RPi port of the latest stable release and will work out of the box (opkg update, opkg install..) Most packages like apache should work out of the box - but kernel moduls could/will probably fail. I won't build an package mirror and won't build packages because of limitied time. Sorry!
- Other than the normal behavior, the RPi does use DHCP to get its IP Adress. To connect for the first time, use nmap to find your RPi in your network. (Then connect via telnet, set an password with passwd and you're good to use SSH finally!)
- The main partition size has been changed from 48 MB to 64 MB - giving you additional space

All the best,

Nico

elektor Live 2013

You can find my slides from the elektor Live 2013, Raspberry Pi 101 Workshop here: elektor_RPi_2013_Maas.pdf [ 6,1 MB ]

The handout or "cheat-sheet" can be downloaded here: elektor_RPi_2013_Maas_Cheat_Sheet.pdf [ 0,4 MB ]

... and finally, you find the Sourcecode of the Sample Projects here: elektor_RPi_2013_Maas_Sourcecode.zip [ 0,03 MB ]

Videorecording of the talk can be found here