Exempel 5 IoT

Inom IoT (Internet of Things) och inbyggda system är samspelet mellan mjukvara och hårdvara en av de mest grundläggande och viktiga principerna. Genom att använda ett program kan en mikrokontroller (MCU) eller enkortsdator (SBC) läsa av signaler från omvärlden och styra olika typer av komponenter, till exempel lysdioder, knappar, sensorer och aktuatorer.

Centrala begrepp i detta sammanhang är:

  • Ingång (INPUT) – används för att läsa av ett tillstånd, till exempel en tryckknapp
  • Utgång (OUTPUT) – används för att styra en komponent, till exempel en LED
  • GPIO-pinnar – allmänna in- och utgångar som kan styras via programkod
  • HIGH och LOW – digitala nivåer som motsvarar på och av

I följande två exempel visas hur dessa begrepp används i praktiken:

  1. En tryckknapp som styr en LED
  2. En RGB-LED som styrs via flera portar

Tillsammans ger exemplen en tydlig bild av hur IoT-enheter programmeras för att reagera på indata och skapa synlig utdata.

Styra en LED med en tryckknapp

I det första exemplet används en SBC-PT där en tryckknapp är kopplad till en digital ingång och en LED till en digital utgång. Programmet läser kontinuerligt av knappens tillstånd och styr LED-lampan därefter.

När knappen är nedtryckt skickas signalen HIGH till ingången. Programmet tolkar detta och sätter utgången till HIGH, vilket gör att LED-lampan tänds. När knappen släpps blir signalen LOW och LED-lampan släcks.

Javascript-program:

var ledp=0;
var botp=1;

function setup() {
	pinMode(ledp, OUTPUT);
	pinMode(botp, INPUT);
}
function loop () {
	if (digitalRead(botp) ==HIGH) {
		digitalWrite(ledp, HIGH);
	}
	else
	{
		digitalWrite(ledp, LOW);
	}
}

Förklaring:
Två variabler som representerar GPIO-pinnarna skapas:

  • ledp = 0 → LED är kopplad till D0
  • botp = 1 → Tryckknappen är kopplad till D1

Funktionen setup() körs en gång när programmet startar och används för att konfigurera hårdvaran:

  • pinMode(ledp, OUTPUT) som anger att LED-pinnen ska fungera som utgång
  • pinMode(botp, INPUT) som anger att knapp-pinnen ska fungera som ingång

Funktionen loop() körs om och om igen så länge programmet är aktivt.

  • digitalRead(botp) läser av knappens tillstånd:
    • HIGH → knappen är nedtryckt
    • LOW → knappen är inte nedtryckt

Logiken är enkel men mycket viktig:

  • Om knappen är nedtryckt tänds LED-lampan (HIGH).
  • Annars släcks LED-lampan (LOW)

Detta gör koden tydligare och lättare att ändra vid behov.

Detta exempel visar ett typiskt händelsestyrt beteende, där en fysisk handling direkt påverkar systemets utdata. Samma princip används i många IoT-lösningar, till exempel strömbrytare, dörrsensorer och enkla styrsystem.

En RGB-LED som styrs via flera portar

I det andra exemplet används en MCU-PT för att styra en RGB-LED. En RGB LED-lampa som består av tre separata lysdioder (Röd, Grön och Blå) som var och en styrs via en egen port.

Här är tre analoga portar (A0, A1 och A2) konfigurerade som utgångar. Programmet tänder och släcker varje färgkanal i tur och ordning med hjälp av tidsfördröjningar. Resultatet blir att RGB-LED:en växlar färg stegvis.

Javascript-program

function setup() {
	pinMode(A0, OUTPUT);
	pinMode(A1, OUTPUT);
	pinMode(A2, OUTPUT);
}
function loop () {
	digitalWrite(A0, HIGH);
	delay(1000);
	digitalWrite(A0, LOW);
	delay(1000);
	
	digitalWrite(A1, HIGH);
	delay(1000);
	digitalWrite(A1, LOW);
	delay(1000);
	
	digitalWrite(A2, HIGH);
	delay(1000);
	digitalWrite(A2, LOW);
	delay(1000);
}

Trots att portarna heter A0–A2 används de i detta exempel som digitala utgångar, vilket är vanligt i mikrokontrollerbaserade system. Detta visar hur flexibel hårdvaran är och hur samma portar kan användas på olika sätt beroende på programlogiken.

Sammanfattning

Dessa exempel visar hur enkla program kan användas för att:

  • läsa av digitala signaler
  • styra en eller flera utgångar
  • skapa tydliga och förutsägbara beteenden i ett IoT-system