Seriell data fra micro:bit

Bilde © Stanley Skarshaug

Bilde © Stanley Skarshaug

Når man skal lage elektronikk prosjekter som skal bruke sensorer er man av og til helt avhengig av å kunne lese data ut av microkontrolleren.

I denne artikkelen skal jeg gi en grunnleggende introduksjon til hvordan programmerer micro:bit til å sende data over seriel porten, og hvordan man kan lese av data med seriell porten på datamaskinen din i MakeCode.

Seriell port?

Hva er egentlig en seriell port?

Seriell porter brukes av to datamaskiner for å kommunisere.

I motsetning til oss mennesker klarer en datamaskin å lytte samtidig som de selv snakker. Derfor kan to datamaskiner konstant sende data til den andre datamaskinen samtidig som den lytter og får med seg data den andre datamaskinen sender til seg. På micro:bit er det en ledning som fungerer som sender (Tx = Transmit), og en som fungerer som mottaker (Rx = Receive).

Faktisk er USB en form for seriell kommunikasjon. Når du bruker en USB kabel for å koble sammen micro:bit til din datamaskin oppretter du en seriell link.

En USB port består av en fire ledninger. +5v, Tx, Rx og Gnd. +5v og Gnd fungerer som strømforsyning, Tx er sender og Rx er mottaker. For at to enheter skal kunne snakke sammen må det kobles en ledning fra Tx på den første enheten, til Rx på den andre enheten, og Fra Rx på den første enheten, til Tx på den andre enheten.

Ledningene inni kabelen som går fra de to kontaktene er krysset slik at Tx på micro:bit skal gå til Rx på datamaskinen, og Rx på micro:bit skal gå til Tx på datamaskinen.

For å gjøre denne koblingen idiotsikker har USB standarden to varianter. USB A som typisk kobles i en datamaskin, og USB B som i dette eksempelet kobles i micro:bit. Det finnes flere forskjellige varianter av USB-B, og den som micro:bit buker er typen USB-micro B.

Det er veldig mange bruksområder for seriell porter, men i denne artikkelen skal vi ta for oss enkel tekst basert seriell kommunikasjon mellom datamaskin og micro:bit.

Motta data fra micro:bit

Når man skal jobbe med sensorer er det spesielt nyttig å se hvilke verdier micro:bit måler med sensoren du skal bruke i programmet ditt.

Ett eksempel kan være lysnivå sensoren. Hvis du har to microbit på samme sted med samme lysstyrke er det ikke uvanlig at lyssensoren på disse måle to forskjellige lysnivåer. For at lysnivået som måles skal kunne brukes i programmene våre må vi justere programmet vårt slik at det fungerer med det lysnivået vi faktisk måler.

For å kunne gjøre denne justeringen er vi helt avhengig av å kunne lese av hva sensoren måler. Den enkleste måten å gjøre det på er å bruke den innebygde seriell konsoll funksjonaliteten i micro:bit og MakeCode.

Vi starter med et veldig enkelt scrcipt som vi programmerer micro:bit med.

seriell print funksjon

Enkelt script for å skrive til seriell monitor.

Scriptet over sender over seriell porten hva lysnivå sensoren måler 10 ganger i sekundet. Skal man kunne få avlest verdi presentert i en graf, og ikke mint få lleselige tall i seriell konsollen må man sende verdiene som en linje.

Legg merke til nøyaktig hvilken kode blokk som ble brukt. I praksis vil det si at micro:bit legger på et linjeskift (trykker enter tasten på tastaturet) etter at data er sendt.

Data som mottas fra micro:bit kan leses i MakeKode ved å åpne seriell konsollen der.

hvordan åpne seriell konsollen til micro:bit

Hvordan åpne seriell konsollen

Legg merke til at du må trykke på rett seriell monitor knapp i MakeCode for å lese av data sendt fra micro:bit, og ikke simulatoren.

Når seriell konsollen er åpen kan du få data fra seriell porten avlest. Hvis data som kommer fra micro:bit er tall kan du få en fin graf som viser hvordan dette tallet forandrer seg over tid.

Skjembilde fra makecode serial console

Skjermbilde fra seriell konsollen

Jeg fikk til å sende data fra micro:bit på en og en linje

Flere verdier samtidig

Ganske ofte ønsker man å lese flere verdier fra seriell konsollen på en gang. Et eksempel er at man ønsker å se sammenhenger mellom hva som skjer i programmet og hvilke verdier som leses av sensorer.

MakeKode sin seriell konsoll kan logge flere grafer på en gang ved hjelp av kommaseparerte verdier.

CSV (Comma Separated Values) er en vanlig måte å gruppere data i ett tabell format på. Dette fungerer ved at hver linje inneholder forskjellige typer data hører sammen på et vis. Hver data er separert med ett komma. Om du har erfaring med Microsoft Excell eller LibreOffice Calc kan man si at hver celle på en rad adskilles med komma. I programmering brukes punktum for å skille heltallet fra desimaltallet; ikke komma. PI skrives altså som 3.14 (ikke 3,14)

Skal seriell konsollen skjønne at flere data hører sammen er man helt avhengig av å sende data i CSV format. Det vil si at micro:bit må vente med å "trykke enter tasten" til at all data har blitt skrevet til linjen som skal ut seriell porten.

I MakeCode vil det praksis si at du må være nøye med å bruke rett kodeblokker. Man må passe på å kun bruke en serieport blokk som skriver linje helt til slutt.

skjermbilde fra makekode

Script som skiver to verdier pr linje til seriell konsollen.

Når man åpner seriell konsollen får man presentert to grafer som gjør det lett å se sammenligne data som sendes fra micro:bit.

Seriell konsoll som printer to leste verdier til graf

Seriell konsoll som printer to leste verdier til graf

Jeg fikk til å sende to verdier fra micro:bit som ble logget med grafer