Oppsett av Raspberry Pi 3

Høst 2019

I denne obligen skal vi først sette opp vår Raspberry Pi 3 model B+ (referert til som RPi fra nå av) og koble til internett før vi skal teste at alt fungerer som det skal.

Oppsettguide til Raspberry Pi 3

Dette dokumentet vil guide deg gjennom oppsett av Raspberry Pi 3 model B+ for faget IN2060.

Pass på at du har alt nødvendig utstyr før du fortsetter på stegene nedenfor.

Oppsett av minnekort

Hvis du har kjøpt minnekort med forhåndsinstallert OS kan dette steget hoppes over.

Følg den offisielle oppsettguiden til RPi for å formatere og installere et operativsystem på minnekortet. Vi anbefaler at du benytter NOOBS, som anbefalt i guiden, men man kan også installere Raspbian direkte om ønskelig. Alle obliger i faget vil anta at man har NOOBS/Raspbian installert, noe som betyr at kommandoer og annet oppsett vil være tilpasset dette.

Før oppstart

Før du kobler til strøm til RPi se til at alle andre kabler er koblet til. Hvis du har tilgang på et kablet nettverk anbefaler vi å koble til dette nå (merk at man ikke kan koble egne maskiner til UiO sitt kabelnettverk). Hvis du ikke har tilgang til et kabelnettverk vil vi senere gå gjennom hvordan å koble seg til uioguest

Oppstart

Koble til strøm til RPi og vent til maskinen har startet helt opp. Hvis du blir spurt om å installere operativsystem gjennom NOOBS følg veiledning på skjermen og velg Raspbian (blir beskrevet som “RECOMMENDED” av veiledningen). Etter dette vil du bli presentert med skrivebordet til Raspbian.

Du vil nå bli presentert med et program som ønsker velkommen til RPi følg veiledningen, velg land, systemspråk og nytt passord. Når det kommer til å koble til trådløsenettverk vil dette dessverre ikke fungere med eduroam, men du kan gjerne koble til uioguest slik at du midlertidig får tilgang til internett. Etter dette vil maskinen starte på nytt. Gratulerer, din RPi er nå klar til bruk!

Hvis oppstartsveilederen ikke starter kan de samme innstillingene settes i Meny -> Preferences -> Raspberry Pi Configuration. Legg spesielt merke til siste fane some styrer språk og nettverksregion.

Før du går videre med oppgavene i denne obligen anbefaler vi at du kjører en oppdatering av systemet. Når du er ferdig med dette gå videre til oppgavene nedenfor som vil sikre at du har satt opp din RPi og alt er klart for et spennende semester med IN2060.

Oppkobling til uioguest

Den enkleste måten å koble til WIFI på UiO er å koble til uioguest og følge instruksjonen for adgang ved å prøve å besøke en nettside.

For øyeblikket er ikke eduroam sitt Python oppsett kompatibelt med raspbian og det er derfor enklere med uioguest.

Hvis du får beskjed om å stille klokken på din RPi når du er koblet til uioguest kan dette gjøres med $ sudo date -s '2019-08-20 10:35:00'. Etter at du har fått koblet til og oppdatert burde maskinen stille klokken etter nettverkstid.

Oppgave

Etter å ha satt opp din RPi skal vi nå bli bedre kjent med operativsystemet (Raspbian - Linux) og komme i gang med en enkel programmeringsoppgave.

Oppgaven skal leveres som en ZIP-et mappe med besvarelse på tekstoppgavene som en PDF-fil og eventuelle andre filer du blir bedt om å produsere lagt ved.

Linux og bash

Som en liten oppvarming skal vi først starte med å bli litt kjent med Linux og terminalen på vår RPi.

Åpne et terminalvindu og lag en ny mappe som heter in2060. Mapper lages med programmet mkdir.

Deretter skal vi bevege oss inn i mappen, før vi gjør det kan det være lurt å sjekke hvilken mappe vi står i akkurat nå, dette gjøres med pwd. For å se de andre mappene i nåværende mappe kan vi bruke kommandoen ls som burde vise mappen in2060 vi laget ovenfor. Et annet kjekt verktøy er kommandoen tree som viser mapper og undermapper som en trestruktur. For å bevege oss inn i mappen vi har laget bruker vi cd kommandoen etterfulgt av mappen vi ønsker å bevege oss inn i.

Inne i denne mappen skal vi gjøre den første oppgaven. Vi ønsker å finne hvor mange pakker some Raspbian har som inneholder ordet assembly. Vi kan bruke verkøyene apt eller apt-cache for å søke etter programmer. Bruk apt programmet og søk etter assembly.

Tips: For å ta skjermbilde på RPi trykk på tasten PrtScn eller kjør kommandoen scrot.

Innlevering:

Kompilere C kode

Det neste vi skal gjøre er å kompilere og kjøre et C program. Under har vi limt inn et program som veldig enkelt skriver ut settningen Hello World!. For at vår RPi skal kunne kjøre denne koden trenger vi å kompilere den med gcc.

La oss først se på koden:

Den første linjen inneholder #include <stdio.h> dette forteller kompilatoren at vi ønsker å inkludere en system fil (vi vet dette siden vi brukte < + > isteden for #include "min_fil.h").

Den neste linjen med kode inneholder int main(int argc, char** argv), dette forteller kompilatoren at vi ønsker å definere en metode, som skal returnere et heltall (int), metoden skal hete main og den tar to argumenter (akkurat nå er det ikke viktig hva disse gjør eller betyr). Når vi definere en metode med navnet main vil kompilatoren merke seg at dette er en spesiell metode (på grunn av navnet) og bruke denne metoden som startpunkt når programmet vårt kjører.

Etter dette følger printf("Hello World!\n"); dette er et metodekall til printf som vil skrive til terminalvinduet vårt. Her ser vi hvorfor vi trengte å inkludere systemfilen tidligere, siden vi ønsket å bruke printf definert i stdio.h. Legg merke til at med printf så inkluderes det ikke en ny linje og vi må manuelt skrive ut dette med \n på slutten.

Helt til slutt avsluttes metoden main ved return 0;. return forteller at vi ønsker å returnere fra metoden, men siden dette er en spesiell metode (main) så har returverdien en spesiell betydning. Å returnere 0 forteller terminalvinduet vårt at programmet avsluttet på riktig måte, mens return 1; ville indikert at det oppstod en feil under kjøring.

Kompilere og kjør koden

Vi skal nå kompilere koden, for å gjøre dette trenger vi tilgang til programmet gcc som allerede burde være installert (hvis ikke kan det installeres med $ sudo apt install gcc).

Lim koden over inn i en fil i mappen in2060 ved navn helloworld.c og kjør følgende.

Innlevering:

FizzBuzz

Siste utfordring i denne obligen blir å endre litt på et C program. Vi skal løse det “kjente” problemet FizzBuzz.

FizzBuzz går ut på å skrive ut tallene mellom 1 og 100, men når tallet er delelig på 3 skrive ut “Fizz”, når det er delelig på 5 “Buzz” og når det er delelig på begge skrive ut “Fizz Buzz”. Vi har gjengitt de første fem utskriftene under.

Bruk følgende C program og gjør nødvendig endringer slik at det oppfyller kravene til FizzBuzz ovenfor.

Lim inn i en fil ved navn fizzbuzz.c og gjør endringer med editoren geany slik at programmet utfører FizzBuzz korrekt for tallene mellom 1 og 100. Underveis og når du er ferdig sjekk at programmet kompileres med gcc -o fizz fizzbuzz.c.

Innlevering:

Tips rundt kompilering

Når man kompilerer C kode kan det være lurt å spørre kompilatoren om det vi gjør virker fornuftig. I gcc kan dette gjøres ved å legge til flaggene -Wall og -Wextra. Disse flaggene gjør at gcc prøver så godt den kan å advare oss når vi gjør dumme ting.

Som et eksempel på dette så er følgende resultatet når løsningsforslaget til FizzBuzz blir kompilert.

Her kan vi se at gcc har oppdaget at vi ikke bruker argumentene til funksjonen og kanskje burde vurdere å ta de bort eller benytte oss av dem.

Dessverre inneholder gcc alt for mange ekstra flag til at vi kan liste de opp her, men denne StackOverflow posten inneholder en god oppsummering. Vi anbefaler at man alltid bruker minst flaggene -Wall og -Wextra når man utvikler C kode slik at kompilatoren best mulig kan hjelpe til.