From charlesreid1

Line 65: Line 65:
</pre>
</pre>


Adafruit_Python_CharLCD
root@kali:~# lsmod
Module                  Size  Used by
cfg80211              498967  0
rfkill                22468  1 cfg80211
snd_soc_wm8804          8209  0
snd_soc_pcm512x_i2c    2562  0
regmap_spi              2307  1 snd_soc_wm8804
snd_soc_tas5713        5858  0
snd_soc_pcm512x        16523  1 snd_soc_pcm512x_i2c
regmap_i2c              3338  3 snd_soc_wm8804,snd_soc_pcm512x_i2c,snd_soc_tas5713
snd_soc_bcm2708_i2s    7595  0
regmap_mmio            3548  1 snd_soc_bcm2708_i2s
snd_soc_core          167442  4 snd_soc_pcm512x,snd_soc_wm8804,snd_soc_tas5713,snd_soc_bcm2708_i2s
snd_compress            8840  1 snd_soc_core
snd_pcm_dmaengine      5770  1 snd_soc_core
snd_pcm                92149  4 snd_soc_pcm512x,snd_soc_wm8804,snd_soc_core,snd_pcm_dmaengine
snd_timer              23475  1 snd_pcm
spi_bcm2708            6006  0
i2c_bcm2708            6244  0
snd                    67406  4 snd_soc_core,snd_timer,snd_pcm,snd_compress
fuse                  92370  1
ipv6                  353829  0


===Enable SPI===
===Enable SPI===
Line 97: Line 72:
However, in order to use I2C, which is the protocol used to communicate from one integrated circuit to another, you need to enable SPI on the Raspberry Pi.
However, in order to use I2C, which is the protocol used to communicate from one integrated circuit to another, you need to enable SPI on the Raspberry Pi.


This page [https://learn.sparkfun.com/tutorials/raspberry-pi-spi-and-i2c-tutorial] states that SPI is not enabled by default on Raspbian. However, I had Kali for ARM installed, and SPI was enabled by default. Here's how I checked:
This page [https://learn.sparkfun.com/tutorials/raspberry-pi-spi-and-i2c-tutorial] states that SPI is not enabled by default on Raspbian. However, I had Kali for ARM installed, and SPI was enabled by default. If you run the lsmod command, you can check whether the SPI kernel module is enabled. (This stuff is mostly over my head anyway, but you don't have to understand all the details of what's going on to make it work...)


<pre>
<pre>
Line 130: Line 105:
</pre>
</pre>


This means we're in business and have the SPI kernel module enabled. In case you don't have it enabled, you can find instructions here [https://projects.drogon.net/understanding-spi-on-the-raspberry-pi/]. Basically:
This means we have the SPI kernel module enabled. In case you don't have it enabled, you can find instructions here [https://projects.drogon.net/understanding-spi-on-the-raspberry-pi/]. Basically, enable the kernel module using modprobe:


<pre>
<pre>

Revision as of 01:18, 15 June 2016

Also see Arduino LCD Display, which was the original.

Overview

See Arduino LCD Display#Overview for an overview of how the LCD display works. It works by communicating with the microcontroller using I2C pins, which provide a way for integrated circuits to communicate with each other.

The Circuit

Breadboard Diagram

Need to make a firtzing diagram for this.

Breadboard Photo

Here's a photo of the breadboard:

File:RaspberryPi LCD Circuit.jpg

Python Sketch

More information about the Raspberry Pi GPIO pinouts and how to control 'em with Python is over on the RaspberryPi/Blink page.

Specifically, here is some Python code written to control GPIO pins on the Raspberry Pi: RaspberryPi/Blink#The_Python_Code

The Code

Adafruit provides a whole long list of examples and Python modules for different device interfaces: https://github.com/adafruit/Adafruit_Python_CharLCD

Prep the Pi

Make sure you can log in to the Pi. This consists of the following steps:

  • Mount the SD card and edit cmdline.txt, hard-code an IP address in cmdline.txt
  • Unmount the SD card and insert it back into the Pi and power it up
  • Give the Pi a minute to finish booting up, then connect it using an Ethernet cable to your desktop/computer
  • Remotely log in to the Pi via SSH

Raspberry Pi GPIO Library

Adafruit code for controlling LCDs from the Raspberry Pi: https://github.com/adafruit/Adafruit_Python_CharLCD

Make sure the RPi-GPIO package is installed:

Download the package on your laptop and copy it over to the Pi:

[laptop] $ wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.11.tar.gz
[laptop] $ scp RPi.*.tar.gz pi@169.254.113.200:~/.

Then you install it manually on the Pi:

[pi] $ cd ~
[pi] $ tar xzf RPi*.tar.gz
[pi] $ cd RPi*
[pi] $ sudo python setup.py install

This has other prerequisites, all available from Adafruit on GitHub (need to add links):

Adafruit_Python_PureIO
Adafruit_Python_GPIO
py-spidev


Enable SPI

In order to use the GPIO, you need the GPIO library installed above (which provides bindings between Python and the Raspberry Pi kernel, which contains code to control the pins on-board the Pi).

However, in order to use I2C, which is the protocol used to communicate from one integrated circuit to another, you need to enable SPI on the Raspberry Pi.

This page [1] states that SPI is not enabled by default on Raspbian. However, I had Kali for ARM installed, and SPI was enabled by default. If you run the lsmod command, you can check whether the SPI kernel module is enabled. (This stuff is mostly over my head anyway, but you don't have to understand all the details of what's going on to make it work...)

$  lsmod
Module                  Size  Used by
cfg80211              498967  0
rfkill                 22468  1 cfg80211
snd_soc_wm8804          8209  0
snd_soc_pcm512x_i2c     2562  0
regmap_spi              2307  1 snd_soc_wm8804
snd_soc_tas5713         5858  0
snd_soc_pcm512x        16523  1 snd_soc_pcm512x_i2c
regmap_i2c              3338  3 snd_soc_wm8804,snd_soc_pcm512x_i2c,snd_soc_tas5713
snd_soc_bcm2708_i2s     7595  0
regmap_mmio             3548  1 snd_soc_bcm2708_i2s
snd_soc_core          167442  4 snd_soc_pcm512x,snd_soc_wm8804,snd_soc_tas5713,snd_soc_bcm2708_i2s
snd_compress            8840  1 snd_soc_core
snd_pcm_dmaengine       5770  1 snd_soc_core
snd_pcm                92149  4 snd_soc_pcm512x,snd_soc_wm8804,snd_soc_core,snd_pcm_dmaengine
snd_timer              23475  1 snd_pcm
spi_bcm2708             6006  0
i2c_bcm2708             6244  0
snd                    67406  4 snd_soc_core,snd_timer,snd_pcm,snd_compress
fuse                   92370  1
ipv6                  353829  0

The line we're looking for here relates to SPI:

spi_bcm2708             6006  0

This means we have the SPI kernel module enabled. In case you don't have it enabled, you can find instructions here [2]. Basically, enable the kernel module using modprobe:

$ sudo modprobe spi_bcm2708
$ sudo chown `id -u`.`id -g` /dev/spidev0.*

Flags