Kategoriarkiv: RaspberryPi

Raspberry Pi og GPS, del 1

GlobalSat ND-100s GPS DongleEt mål med min RPi var å teste ut om jeg kunne bruke en GPS-dongle for å hente ut informasjon om lokasjon, fart og høyde osv. Klarer jeg det burde det ikke være noe problem å sende det via SMS for å rapportere evt. bevegelse eller noe sånt.

Da er det på tide å teste om det er mulig å få kontakt med GPS-dongelen min.  Det enkleste er å bare plugge den inn og se hva som skjer.

Jeg plugget GPS receiver i en ledig port på min PiHub, og sjekket i loggen (/var/log/messages) om noe ble rapportert, og sannelig dukket det opp treff der:

# tail -20 /var/log/message
Feb  7 23:18:13 raspberrypi kernel: [ 9701.726689] usb 1-1.3.2: new full-speed USB device number 7 using dwc_otg
Feb  7 23:18:13 raspberrypi kernel: [ 9701.832322] usb 1-1.3.2: New USB device found, idVendor=067b, idProduct=2303
Feb  7 23:18:13 raspberrypi kernel: [ 9701.832361] usb 1-1.3.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Feb  7 23:18:13 raspberrypi kernel: [ 9701.832381] usb 1-1.3.2: Product: USB-Serial Controller D
Feb  7 23:18:13 raspberrypi kernel: [ 9701.832399] usb 1-1.3.2: Manufacturer: Prolific Technology Inc.
Feb  7 23:18:13 raspberrypi kernel: [ 9701.938148] usbcore: registered new interface driver pl2303
Feb  7 23:18:13 raspberrypi kernel: [ 9701.938347] usbserial: USB Serial support registered for pl2303
Feb  7 23:18:13 raspberrypi kernel: [ 9701.938486] pl2303 1-1.3.2:1.0: pl2303 converter detected
Feb  7 23:18:13 raspberrypi kernel: [ 9701.950444] usb 1-1.3.2: pl2303 converter now attached to ttyUSB3

Ergo ble GPS-receiveren registrert, og den kan adresseres som /dev/ttyUSB3.

Enn så lenge får jeg ikke gjort noe fornuftig med denne informasjonen, så jeg må installere noen GPS-programmer og -biblioteker for å få brukt dette til noe fornuftig:

# apt-get install gpsd gpsd-clients python-gps

En liste med programvarepakker blir installert.

Så må programmet som kommuniserer med GPSen startes. Kommandoen spesifiserer hvilken port som skal brukes, og hvilken fil som skal fungere som «socket» (for å kommunisere med enheten):

# gpsd /dev/ttyUSB3 -F /var/run/gpsd.sock

Du får ingen tilbakemelding på denne kommandoen hvis alt gikk ok.

Nå er det på tide å sjekke om jeg får lest ut noe fornuftig fra GPS’en. Dette gjøres med kommandoen cgps:

# cgps -s

Følgende informasjon vises hos meg:

┌───────────────────────────────────────────┐
│    Time:       2014-02-10T22:56:51.000Z   │
│    Latitude:    5X.YYYYYY N               │
│    Longitude:   1X.YYUUUU E               │
│    Altitude:   535.9 ft                   │
│    Speed:      0.0 mph                    │
│    Heading:    0.0 deg (true)             │
│    Climb:      0.0 ft/min                 │
│    Status:     3D FIX (324 secs)          │
│    Longitude Err:   +/- 43 ft             │
│    Latitude Err:    +/- 88 ft             │
│    Altitude Err:    +/- 155 ft            │
│    Course Err:      n/a                   │
│    Speed Err:       +/- 121 mph           │
│    Time offset:     1.089                 │
│    Grid Square:     JO59kw                │
└───────────────────────────────────────────┘
┌─────────────────────────────────┐
│PRN:   Elev:  Azim:  SNR:  Used: │
│  21    45    174    19      Y   │
│   2    08    042    13      Y   │
│  23    11    309    26      Y   │
│  31    34    220    28      Y   │
│  13    14    340    29      Y   │
│  29    59    087    27      Y   │
│   5    25    066    17      N   │
│  16    24    297    21      N   │
│                                 │
└─────────────────────────────────┘

Boksene oppdateres hvert sekund, og de vises egentlig ved siden av hverandre, men kolonnebredden på bloggen gjorde at jeg viser de under hverandre. Første boks viser min posisjon, fart og høyde, mens den andre boksen viser informasjon om satelittene GPS-dongelene plukker opp.

Konklusjon så langt: Det var ikke noe problem å hente ut automatisk oppdatert informasjon fra GPS-dongelen. Det som gjenstår er å hente ut et valgfrie verdier ved behov, så jeg f.eks. kan sende en SMS med posisjon og fart hvis enheten begynner å flytte på seg.

Raspberry Pi og GSM-modem, del 1: Sende SMS

Huawei_E173Det aller første jeg ville gjøre var å klargjøre min RPi og sjekke om jeg fikk sendt en SMS med GSM-dongelen min. Slik gjorde jeg dette:

Via http://www.raspberrypi.org/downloads lastet jeg ned NOOBS og installerte standard Raspian på SD-kortet mitt. Beskrivelse av det du trenger finnes på nevnte adresse.

Etter første gangs oppstart opprettet jeg en egen bruker for meg (liker å ha min egen bruker):

adduser MinBruker    (legger til brukeren)
passwd MinBruker    (setter nytt passord)
sudo cp -a /home/pi /home/MinBruker
sudo chown -R MinBruker:MinBruker /home/MinBruker

Å legge inn en egen bruker for meg er bare en «greie» jeg har, så miljøet blir mest mulig likt på denne enheten som de andre Linux-boksene jeg bruker. RPi kommer med en vanlig bruker som heter «pi» som er den som er ment brukt til alle vanlige oppgaver.

Deretter installerte jeg gammu, som er en programvarepakke som lar meg kommunisere med GSM-modemet og sende SMS.

$ sudo apt-get install gammu

(det installeres samtidig endel ekstra pakker pga dependencies/avhengigheter)

Jeg installerte også et par tilleggspakker, som strengt tatt ikke er nødvendige:

$ sudo apt-get install gammu-doc wammu

(det installeres samtidig endel ekstra pakker pga dependencies/avhengigheter)

Plugg inn USB-modem med SIM-kort på plass. Jeg har et Huawei E173, som skal fungere fint med RPi. Restart din RPi så denne scanner etter maskinvare og oppdager GSM-modemet.

Logg inn på din RPi med valgt bruker. Bytt til root-bruker for å få satt opp alt uten å måtte kjøre sudo hele tiden:

$sudo su -

Merk: Etter å ha byttet til root-bruker endrer kommandopromptet seg fra «MinBruker@raspberrypi ~$ » til «root@raspberrypi:/home# «. Den viktigste forskjellen er siste tegn i promptet – #. Dette tegnet indikerer at du er root.

Hva sier «dmesg»? Ble GSM-modemet funnet ved oppstart?

# dmesg | grep tty
 [    0.000000] Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=1872 bcm2708_fb.fbheight=1168 bcm2708.boardrev=0xe bcm2708.serial=0xb3cf95db smsc95xx.macaddr=B8:27:EB:CF:95:DB sdhci-bcm2708.emmc_clock_freq=250000000 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000  dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait
 [    0.000000] console [tty1] enabled
 [    0.530054] dev:f1: ttyAMA0 at MMIO 0x20201000 (irq = 83) is a PL011 rev3
 [    0.872363] console [ttyAMA0] enabled
 [   15.580525] usb 1-1.3.4: GSM modem (1-port) converter now attached to ttyUSB0
 [   16.001385] usb 1-1.3.4: GSM modem (1-port) converter now attached to ttyUSB1
 [   16.290602] usb 1-1.3.4: GSM modem (1-port) converter now attached to ttyUSB2

Joda, dmesg viser også at GSM-modemet ble funnet ved boot, og at det har tre tilgjengelig porter (ttyUSB0, ttyUSB1 og ttyUSB2).

Sjekk om gammu også finner GSM-modemet ditt. Det er ikke mye hjelp i at Linux finner GSM-modemet hvis ikke gammu gjør det. Da er du like langt. Kjør kommandoen «gammu-detect» og se hva slags svar du får:

# gammu-detect
 ; Configuration file generated by gammu-detect.
 ; Please check The Gammu Manual for more information.

[gammu]
 device = /dev/ttyUSB0
 name = Phone on USB serial port HUAWEI_Technology HUAWEI_Mobile
 connection = at

[gammu1]
 device = /dev/ttyUSB1
 name = Phone on USB serial port HUAWEI_Technology HUAWEI_Mobile
 connection = at

[gammu2]
 device = /dev/ttyUSB2
 name = Phone on USB serial port HUAWEI_Technology HUAWEI_Mobile
 connection = at

opening socket: No such device

Ikke bry deg om feilmeldingen nederst – det viktigste er at GSM-modemet ble funnet.

Bruk kommandoen «gammu-config» for å konfigurere gammu-oppsettet. Du må f.eks. velge hvilket av de 3 oppdagede GSM-portene som skal benyttes:

# gammu-config

Du skal nå få opp et grensesnitt for å konfigurere gammu-programvaren:

ââââââââââââââââââââââââââââââââââââââââââââââââ
â Current Gammu configuration                  â
â                                              â
â  P Port                 (/dev/ttyUSB0)       â
â  C Connection           (at19200)            â
â  M Model                ()                   â
â  D Synchronize time     (yes)                â
â  F Log file             (/var/log/messages)  â
â  O Log format           (nothing)            â
â  L Use locking          ()                   â
â  G Gammu localisation   ()                   â
â  H Help                                      â
â  S Save                                      â
â                                              â
â                                              â
â          <Ok>              <Cancel>          â
â                                              â
ââââââââââââââââââââââââââââââââââââââââââââââââ

Begynn med «Port» og velg først at du vil bruke «/dev/ttyUSB0«.
Deretter velger du «Save» for å lagre inntillingen.
Det er mulig du må bekrefte lagring. Gjør i så fall det.

Etter at du har lagret kjører du kommandoen «gammu –identify» for å se om du valgte korrekt port, og at gammu klarer å hente ut informasjon fra SIM-kortet ditt. Dette skal i så fall ligne på dette:

# gammu --identify
Device               : /dev/ttyUSB0
Manufacturer         : Huawei
Model                : E173 (E173)
Firmware             : 11.126.15.02.00
IMEI                 : xxxxxxxxxxxxxxx   (anonymisert)
SIM IMSI             : xxxxxxxxxxxxxxx   (anonymisert)

Hos meg fant gammu SIM-kortet på første forsøk, på port «/dev/ttyUSB0«. Jeg har sett andre rapportere at det kan variere hvilken port som er korrekt. Det kan også variere med hvilken USB-port du bruker på din RPi (eller på tilkoblet USB-hub). Hvis gammu ikke finner SIM-kortet og viser inforomasjon om dette så repeterer du forrige avsnitt («gammu-config») og velger port «/dev/ttyUSB1» før du fortsetter med dette avsnittet. Får du heller ikke nå noe resultat repeterer du rutinen og velger port «/dev/ttyUSB2».

Sett SIM-kortets PIN-kode:

gammu --entersecuritycode PIN 9999    (erstatt "9999" med PIN)

(Merk: Du får ingen tilbakemelding når kommandoen er ferdig.)

Prøv å sende en SMS, med gammu sin kommandolinje:

# echo "Testmelding fra RPi, sendt via gammu" | gammu  \ --sendsms TEXT xxxyyzzz

(erstatt xxxyyzzz med riktig telefonnummer). Du skal nå få se fremdriften, og forhåpentligvis ser det ut som dette:

If you want break, press Ctrl+C...
Sending SMS 1/1....waiting for network answer..OK, message reference=-1

Meldingen er sendt, det er bare å vente…

Hurra! Meldingen kom fram:
Suksess! Første SMS kom fram.

Så hva gjenstår? Dette var en enkelt, frittstående SMS. Dette må samles i et script som kan kalles og kjøres hver RPi skal sende en SMS. Jeg må også lese meg opp på mottak av SMS, så GSM-dongelen kan ta imot kommandoer via SMS, utføre kommandoen og sende resultatet til min mobil.

Prosjekt: Raspberry Pi

RPi_Starter_KitProsjektet

Før jul kjøpte jeg meg en Raspberry Pi (RPi) for å se om den kunne brukes til noe morsomt. Inspirert av hva andre har gjort med denne lille dingsen var planen å teste den som mediesenter (OpenELEC), kartplotter (OpenCPN) og ellers sjekke ut om den kunne brukes som «vakt» i båten (sensorer, kamera og SMS-varsling) om vinteren.

Hva er RPi? En RPi er en liten datamaskin laget av The Raspberry Pi Foundation, litt større enn et kredittkort. Maskinen har utganger for lyd og bilde, og USB-porter for å koble til andre enheter. Den kan brukes til stort sett alt det en vanlig PC kan brukes til, men den er ikke spesielt kraftig, og den kan ikke kjøre Windows operativsystem. Den kan derimot kjøre flere forskjellige operativsystemer basert på Linux, android eller helt andre plattformer.

En av de store styrkene til RPi er at den er strømsnill, og den er liten og lett å gjemme bort i en stereobenk eller et rom i båt/bil. I tillegg til de vanlige tilkoblingsportene (USB, HDMI osv) har den flere litt mer spesielle muligheter (8 dedikerte GPIO pinner, UART, i2c buss, SPI buss, i2s audio m.m.).

Utstyr

I utgangspunktet bestilte jeg et Raspberry Pi Starter Kit fra MPX for å få alt jeg trengte for å komme igang i én enkelt pakke, og så installerte jeg en preview av Kano OS. Jeg har støttet Kano-prosjektet på Kickstarter og har dermed tilgang på deres programvare, men Kano OS var ikke noe å satse på for dette prosjektet.

OK, det første jeg ville teste var å sende SMS. Jeg bestilte derfor inn to Huawei E173 USB-baserte GSM-modemer via eBay. Disse USB-pinnene har både GSM-modem og en microSD-kontakt så man kan installere et ekstra minnekort hvis man trenger mer lagringsplass. Det var også flere som kunne bekrefte at de fungerer fint med Raspberry Pi.

Fordi GSM-modemet suger endel strøm fra USB-porten kjøpte jeg en PiHub fra Pimoroni. Dette er en USB-hub som har 3000mA strøm på deling mellom portene, så den kan drive enheter som RPi ikke klarer å drive alene. Den er også skreddersydd for RPi, så den kan både gi strøm til RPi og la RPi bruke den for å koble flere enheter til RPI’en. Noen USB-huber takler ikke at en RPi er koblet til i «loop», dvs at RPi både henter strøm fra PiHub via én port og kommuniserer med de andre USB-enhetene via en annen port (to kabler mellom RPi og PiHub). Jeg har tegnet et kontantkort-abonnement hos OneCall – det var det billigste jeg fant sånn i farta, og jeg kunne hente kortet på Narvesen eller 7-11 etter bare en times tid.

Etterhvert vil jeg også teste ut den USB-baserte GPS-pinnen jeg har liggende – en GlobalSat ND-100S GPS Dongle. Foreløpig er den testet med en vanlig PC med Windows 7 og OpenCPN, og den skal også fungere på Linux og Android.

Jeg har også en USB-dings fra Clas Ohlson som logger temperatur og luftfuktighet (http://www.clasohlso…ogger/36-4208-1). I utgangspunktet er den ment som frittstående logger, og lagrer alle verdier til internminne på pinnen, og så bruker man et Windows-basert program for å lese ut historiske data i ettertid. Jeg håper det er mulig å hente ut noe i sanntid (f.eks. med 5 minutters mellomrom), men det gjenstår å se.

Helt til slutt ser jeg også etter andre sensorer for tilkobling direkte på RPi’ens kretskort (dvs ikke via USB). Det gjenstår å se hva det blir. Foreløpig er det snakk om å få de nevnte USB-dingsene til å fungere.