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.