Pi-Lite

 

Innehåll.


Tillbaka till Raspberry Pi.
Inledning.
Installation.
Testning.
Terminalkommandon.
Seriekommunikation
Pi-Lite och Arduino.
Exemnpel.
Pi-Lite och C.


Pi-Lite


 

Inledning.

Beskrivninga hur man installerar och använder Pi-Lite.
Pi-Lite finns i två versioner, en med röda lysdioder och en med vita lysdioder.
Pi-Lite är en stor LED-matris (14 x 9) som kan användas till att skrolla text och grafik. Det är ett spännande sätt att göra någonting roligt med Raspberry Pi. Den är lätt att ansluta utan att behöva löda och det krävs inga speciella färdigheter. Pi-Lite kombinerar den mycket populära Arduino med Raspberry Pi.
Genom att använda standardiserad seriel kommunikation (@9600bps) är det ganska enkelt att skicka text och grafik till de 126 LEDen.
Matrisen styrs av en ATMega328p processor vilket betyder att hantering av de 126 LED avlastas Raspberry Pi's processor och GPIO till andra arbetsuppgifter.
När man anslutit Pi-Lite till Raspberry Pi och ansluter strömmen så kör Pi-Lite en test/demonstration genom att skanna i genom och visa alla tecken som är möjliga.

För att programmera Pi-Lite används oftast Python men här kommer C att användas.

 


 

Installation.

Det första man måste göra är att uppdatera Raspberry Pi med de senaste:
sudo apt-get update
sudo apt-get upgrade

Börja med att installera följande:
git clone https://github.com/thomasmacpherson/pilite.git
cd pi-lite/python
sudo python setup.py install
sudo modprobe spi-bcm2708
cd pilite/c
sudo apt-get install automake libtool git
sudo ./autogen.sh && ./configure && make && sudo make install
sudo ldconfig

sudo apt-get install minicom

Om man inte redan gjort det, är det bra att installera Geany som är ett GUI som kan vara bra att använda vid utveckling.
sudo apt-get install geany.

Koppla bort login via serieporten vilket görs på följande sätt:
$sudo nano /etc/inittab

I slutet på filen finns raden:

T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Lägg till ett hash-tecken (#) först i raden.

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100


Boota om! ($sudo shutdown -r now)

 

Till början.


 

Testning.

Så snart Pi-Lite får ström och startat upp kan du kommunicera med den via the serieporten.
När Pi-Lite är ansluten till Raspberry Pi, kommer serieporten vara /dev/ttyAMA0, men på någon annan dator eller kontroller kan det vara en annan port. Du kan använda minicom eller något annan liknande terminalprogram för att kontakta den:

minicom -b 9600 -o -D /dev/ttyAMA0

Sätt upp användaren pi i gruppen dialout:
sudo usermod -a -G dialout pi

Skapa en textfil, test.txt med någon text i till exempel "Pelle Persson. 2014-04-12.".

Starta minicom med kommando:
minicom -b 9600 -o -D /dev/ttyAMA0

När minicom startat skriver du Ctrl-A S
Välj ascii följt av Return/Enter.
Sök upp och välj filen test.txt. Tryck på Return/Enter och texten scrollas fram på Pi-Lite.



 
 

Terminalkommandon.

I minicom kan man skriva kommandon direkt till Pi-Lite. Kommandona inleds med tre stycken dollarteckwen $$$. OBS! $-tecknen fås genom ctrl+4($)

SPEED(value)
$$$SPEED200[RETURN]

F(value)
example (pacman)
$$$F00000000000000000000011100001111111001111111011111111111110111111110111101100011001100011
0000000000000000000000000000000000000

B(column),(value)
examples
$$$B1,89[RETURN] - column 1 set to 89%
$$$B14,20[RETURN] - column 14 set to 20%

V(row),(value)
examples
$$$V1,89[RETURN] - bar 1 set to 89%
$$$V2,20[RETURN] - bar 2 set to 20%

P(column),(row),(action)
examples
$$$P4,4,ON[RETURN]
$$$P4,4,OFF[RETURN]
$$$P4,4,TOGGLE[RETURN]

ALL,(value)
examples
$$$ALL,ON
$$$ALL,OFF

SCROLL(value)
examples
$$$SCROLL-4[RETURN]

T(column),(row),(character)
examples
$$$T1,1,Z[RETURN] - display a Z at location 4,4
								
								



 

Till början.



 

Pi-Lite och Arduino.

Det sitter en hel dator, SoC, på kortet för att hantera alla lysdioder. Datorn är en Arduino Uno.
Installera Arduino IDE:
sudo apt-get install arduino

Kontrollera inställningarna i Arduino före användning, programmering:
1. Tools > Board > Arduino Uno
2. Tools > Serial Port > /dev/ttyS0
3. Tools > Programmer > AVRISP mkII

Sketcher ska ligga i mappen /home/pi/sketchbook. Bland annat ska det finnas en mapp som heter libraries.
Ladda ner PiLite-master.zip. Packa upp filen och där finns bland annat mappen LoLShield. Kopiera mappen till /home/pi/sketchbook/libraries. Nu kommer det att finnas följande sökväg:
/home/pi/sketchbook/libraries/LoLShield/examples
. I examples finns sketchen PI_LITE vilken är den sketch som är installerad i Pi-Lite vid leverans.
Detta kan bra att veta om något går fel. Lite tips finns här om det uppstår något trubbel.

I övrigt hänvisas till andra beskrivningar om Arduino Uno.



 

Arduino Language Reference.


Här finns beskrivning på Arduino's kommandon, engelska.



Till början.



 

Exempel.

Här finns exempelprogram att hämta (engelska):http://openmicros.org/index.php/articles/94-ciseco-product-documentation/raspberry-pi/304-pi-lite-python-examples



 
 

Seriekommunikation.

Pi-Lite har en Arduino med förinstallerad mjukvara. Genom att ansluta el till Pi-Lite, kan du antingen serieporten (GPIO pin 10, UART-RXD and GPIO pin 8, UART-TXD).


#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>

#define BAUDRATE B9600
#define MODEMDEVICE "/dev/ttyAMA0"
#define _POSIX_SOURCE 1 /* POSIX compliant source */


int main(int argc, char ** argv) {
  int fd;
  struct termios oldtio,newtio;
  char buff[255];
  
  // Open the Port. We want read/write, no "controlling tty" status, and open it no matter what state DCD is in
  fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NDELAY);
  if (fd == -1) {
    perror("open_port: Unable to open /dev/ttyAMA0 - ");
    return(-1);
  }

    bzero(&newtio, sizeof(newtio)); /* clear struct for new port settings */
        
    /* 
          BAUDRATE: Set bps rate. You could also use cfsetispeed and cfsetospeed.
          CRTSCTS : output hardware flow control (only used if the cable has
                    all necessary lines. See sect. 7 of Serial-HOWTO)
          CS8     : 8n1 (8bit,no parity,1 stopbit)
          CLOCAL  : local connection, no modem contol
          CREAD   : enable receiving characters
     */
     newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
     
      /*
          IGNPAR  : ignore bytes with parity errors
          ICRNL   : map CR to NL (otherwise a CR input on the other computer
                    will not terminate input)
          otherwise make device raw (no other input processing)
      */
      newtio.c_iflag = IGNPAR | ICRNL;
         
      /*
		Raw output.
      */
      newtio.c_oflag = 0;
         
      /*
          ICANON  : enable canonical input
          disable all echo functionality, and don't send signals to calling program
      */
      newtio.c_lflag = ICANON;

      /* 
          initialize all control characters 
          default values can be found in /usr/include/termios.h, and are given
          in the comments, but we don't need them here
      */
      newtio.c_cc[VINTR]    = 0;     /* Ctrl-c */ 
      newtio.c_cc[VQUIT]    = 0;     /* Ctrl-\ */
      newtio.c_cc[VERASE]   = 0;     /* del */
      newtio.c_cc[VKILL]    = 0;     /* @ */
      newtio.c_cc[VEOF]     = 4;     /* Ctrl-d */
      newtio.c_cc[VTIME]    = 0;     /* inter-character timer unused */
      newtio.c_cc[VMIN]     = 1;     /* blocking read until 1 character arrives */
      newtio.c_cc[VSWTC]    = 0;     /* '\0' */
      newtio.c_cc[VSTART]   = 0;     /* Ctrl-q */ 
      newtio.c_cc[VSTOP]    = 0;     /* Ctrl-s */
      newtio.c_cc[VSUSP]    = 0;     /* Ctrl-z */
      newtio.c_cc[VEOL]     = 0;     /* '\0' */
      newtio.c_cc[VREPRINT] = 0;     /* Ctrl-r */
      newtio.c_cc[VDISCARD] = 0;     /* Ctrl-u */
      newtio.c_cc[VWERASE]  = 0;     /* Ctrl-w */
      newtio.c_cc[VLNEXT]   = 0;     /* Ctrl-v */
      newtio.c_cc[VEOL2]    = 0;     /* '\0' */
      
      /* 
          now clean the modem line and activate the settings for the port
      */
      tcflush(fd, TCIFLUSH);
      tcsetattr(fd,TCSANOW,&newtio);

 
  // Turn off blocking for reads, use (fd, F_SETFL, FNDELAY) if you want that
  fcntl(fd, F_SETFL, 0);

  // Write to the port
  int n = write(fd,"Hello Peripheral\n",20);
  if (n < 0) {
    perror("Write failed - ");
    return -1;
  }

  // Don't forget to clean up
  close(fd);
  /* restore the old port settings */
   tcsetattr(fd,TCSANOW,&oldtio);
   
  return 0;
}														
							

OBS! Mängden data som kan skickas (write) är begränsad så vida man inte gör avbrott i skrivandet. Cirka 25 bokstäver kan skickas åt gången.



 

Till början.



 

Pi-Lite och C.

Kontrollera att wiringPi är installerat. Så här installeras paketet:

sudo apt-get install git-core
sudo apt-get update
sudo apt-get upgrade
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build



 

FUNCTIONS.

Här är fuktioner i Pi-Lite.



Till början.