Here is a display module for Raspberry Pi and boards with a RPi compatible GPIO header (Banana Pi, BPro…).
It features a 3.2″ inches RGB TFT with 320×240 resolution, a resistive touchpanel and 3 GPIO buttons.
It mounts directly on the GPIO header and doesn’t need any external components or cables.
It is sold $28.49 at SainSmart online store.
1- Specifications
LCD Size | 3.2″ inches (display area : 66mm x 49mm) |
LCD Resolution | 320 x 240 RGB565 |
Video output | SPI |
Video controller | ILI9341 |
Touch panel type | Resistive |
Touch panel output | SPI + 1 interrupt |
Touch controller | Texas Instruments TSC2046 |
Additional features | 3 GPIO buttons |
Powering | 3.3 / 5V via GPIO header |
Size | 86mm x 51mm x 25mm (including pin header extrusion) |
Price / Availability | $28.49 at Sainsmart |
2- Pictures
3- Pinout
Unfortunately, SainSmart doesn’t provide schematics or even pinouts. Here comes my multimeter !
Display module GPIO | Raspberry Pi GPIO |
LCD_MOSI / TP_MOSI | SPI_MOSI |
LCD_MISO / TP_MISO | SPI_MISO |
LCD_SCK / TP_SCK | SPI_SCLK |
LCD_RS | GPIO 22 (pin 15) |
LCD_CS | SPI_CE0 (pin 24) |
RST | GPIO 27 (pin 13) |
TP_IRQ | GPIO 17 (pin 11) |
TP_CS | SPI_CE1 (pin 26) |
KEY1 | GPIO 18 (pin 12) |
KEY2 | GPIO 23 (pin 16) |
KEY3 | GPIO 24 (pin 18) |
So, it appears it is either a real WaveShare32 display, or a perfect clone… 😎
4- Display setup
Sainsmart doesn’t provide any sources or usefull information, but the module is very easy to use.
First, install the display module on the Raspberry Pi board, and power it.
Now, install fbtft kernel with SPI DMA support.
sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update
Download waveshare overlays and copy them in /boot/overlays/.
cd /tmp git clone https://github.com/swkim01/waveshare-dtoverlays.git sudo cp waveshare-dtoverlays/*.dtb /boot/overlays/
Specify this overlay file in your /boot/config.txt
along with activating SPI.
sudo nano /boot/config.txt
Add these 2 lines at the end of the file :
dtparam=spi=on dtoverlay=waveshare32b
Enable console on the display
Edit /boot/cmdline.txt
sudo nano /boot/cmdline.txt
At the end of the line, add this :
fbcon=map:10
This is also where you could rotate the console display, with fbcon=rotate:n where n is a different orientation (0,1,2,3)
Enable X window on the display
Edit xorg config file and change default framebuffer device (fb0) to our new framebuffer (fb1)
sudo nano /usr/share/X11/xorg.conf.d/99-fbturbo.conf
Change this line to fb1 :
Option "fbdev" "/dev/fb1"
Now, reboot your Pi. Your console should show on the display.
5- Console touch calibration
Edit, 2016.02.14 : A bug in the Debian 8 « Jessie » libsdl component prevents the touchpanel to work reliably in Pygame, from the console. For a workaround, please read this blog article if you are using Debian Jessie.
Input devices get a device name which depends on the order of detection (/dev/input/eventX).
These udev rules will create a symlink /dev/input/touchscreen
pointing to the touch controller device. Reloading the driver or rebooting is necessary for the change to take effect.
/etc/udev/rules.d/95-ads7846.rules
SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{name}=="ADS7846*", SYMLINK+="input/touchscreen"
/etc/udev/rules.d/95-stmpe.rules
SUBSYSTEM=="input", ATTRS{name}=="stmpe-ts", ENV{DEVNAME}=="*event*", SYMLINK+="input/touchscreen"
Now, reboot.
In order to use the touch panel with python, X, and to calibrate it, a few packages need loading :
sudo apt-get install -y libts-bin evtest xinput python-dev python-pip
sudo pip install evdev
# install ts_test with Quit button
sudo wget -O /usr/bin/ts_test http://tronnes.org/downloads/ts_test
sudo chmod +x /usr/bin/ts_test
To calibrate the touchscreen :
sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/touchscreen ts_calibrate
6- X windows touch calibration
xinput-calibrator provides a way to calibrate the touchpanel for X windows use. Install
cd /tmp
wget http://tronnes.org/downloads/xinput-calibrator_0.7.5-1_armhf.deb
sudo dpkg -i -B xinput-calibrator_0.7.5-1_armhf.deb
rm xinput-calibrator_0.7.5-1_armhf.deb
Configure xinput-calibrator to autostart with X windows.
sudo wget -O /etc/X11/Xsession.d/xinput_calibrator_pointercal https://raw.github.com/tias/xinput_calibrator/master/scripts/xinput_calibrator_pointercal.sh
echo "sudo /bin/sh /etc/X11/Xsession.d/xinput_calibrator_pointercal" | sudo tee -a /etc/xdg/lxsession/LXDE-pi/autostart
On first start of X windows a calibration window will be displayed.
startx
Delete /etc/pointercal.xinput
and restart X to recalibrate.
Touch panel rotation
xinput-calibrator doesn’t handle touchpanels with X/Y swapped.
If your calibration results in swapped axis, add these config files.
/usr/share/X11/xorg.conf.d/99-ads7846-cal.conf
Section "InputClass"
Identifier "calibration"
MatchProduct "ADS7846 Touchscreen"
Option "SwapAxes" "1"
EndSection
/usr/share/X11/xorg.conf.d/99-stmpe-cal.conf
Section "InputClass"
Identifier "calibration"
MatchProduct "stmpe-ts"
Option "SwapAxes" "1"
EndSection
7- Disable screen blanking
Edit /boot/cmdline.txt and add consoleblank parameter
sudo nano /boot/cmdline.txt
add this to the end of the line :
consoleblank=0
Edit /etc/kbd/config and edit display blanking parameters
sudo nano /etc/kbd/config
Find these lines and replace the values with 0 (zero) :
BLANK_TIME=0
POWERDOWN_TIME=0
8- Use the buttons
The 3 buttons are very easy to use, once pinout is found.
Here is a very simple python example :
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(12, GPIO.IN, pull_up_down = GPIO.PUD_UP) GPIO.setup(16, GPIO.IN, pull_up_down = GPIO.PUD_UP) GPIO.setup(18, GPIO.IN, pull_up_down = GPIO.PUD_UP) while True: if(GPIO.input(12) == 0): print(“Button 1 pressed”) if(GPIO.input(16) == 0): print(“Button 2 pressed”) if(GPIO.input(18) == 0): print(“Button 3 pressed”) GPIO.cleanup()
Save it to /home/pi/buttons.py (for an example) and execute it with
python /home/pi/buttons.py
Once your are happy with your script, execute it at boot.
sudo nano /etc/rc.local
Add your script before the exit line, with a « & » to make it non-blocking :
python /home/pi/buttons.py &
You could find easily adaptable and more advanced scripts on my previous articles here and here.
9- Conclusion
This is nice little display with good view angles, a good brightness and 3 usefull buttons. It is also easy to set up, which is nice.
Sources :
https://www.raspberrypi.org/forums/viewtopic.php?t=64993&f=45
https://github.com/notro/fbtft/wiki/FBTFT-on-Raspian
2 réflexions au sujet de « [Review / Guide] WaveShare / SainSmart 3.2 inch RPi LCD »