Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688
Onderdelen en benodigdheden
| Espressif ESP8266 ESP-01 | × | 1 |
| Arduino Nano R3 | × | 1 |
| Microchip Technology ATtiny85 | × | 1 |
| DHT22 Temperatuursensor | × | 1 |
| Servo's (Tower Pro MG996R) | × | 1 |
Apps en online diensten
- Arduino IDE
Over dit project
Winter is coming
Toen mijn vrouw en ik vorig jaar ons eerste kind kregen, kochten we een elektrische estufa om de directe omgeving van onze dochter warm te houden. Wij verhuisden de estufa mee van kamer naar kamer, denkend dat we super-efficiënt waren met punt-van-gebruik klimatregeling. Een maand later was de energierekening dubbel zo hoog – het had goedkoper uitgepakt om het hele huis met de gas-CV ketel te verwarmen.

Deze winter upgrade ik naar een WiFi-thermostaat voor afstandsbediening. Handiger, maar we verwarmen nog steeds het hele huis terwijl we meestal in één deel wonen.
Slimmer werken
Uit de logs van de bewegingssensoren (die de verlichting sturen) blijkt dat we maandag t/m vrijdag 4-5 uur 's avonds beneden zijn en om 9 uur naar boven gaan slapen. Weekends verschillen, maar de werkdagen lopen als een klokje (vooral met een 10-maanden-oude op strikt schema).


Multi-zone HVAC-systemen met draadloze duct-klappen zijn duur en de software voelt als een nabeschouwing. Ik had al WiFi-temperatuursensors en wilde servos in een project gebruiken. Alles wat ik nodig had: WiFi-verbonden servos die duct-ventilaties open/dicht doen – makkelijk toch?

MediaTek's LinkIt™ Smart 7688
De LinkIt Smart 7688 Duo HDK is een WiFi-microprocessor met OpenWRT en een onboard Arduino-compatibele microcontroller. Perfect: alle I/O-pins voor sensoren en servos, plus WiFi om met mijn bestaande temperatuursensors te praten. Omdat het OpenWRT met uHTTPd draait, kan de WebApp direct op de LinkIt draaien – een volledig zelfstandig pakket.


LinkIt Smart 7688 HDK instellen
Eerste keer een board met ingebouwde WiFi – ik verwachtte een steile leercurve. Gelukkig is setup 3 stappen:
- LinkIt aanzetten en verbinden met zijn WiFi-accesspoint vanaf je computer
- Inloggen op de webinterface en je eigen WiFi-instellingen invoeren
- Het board "LinkIt Smart 7688 Duo" toevoegen in de Arduino IDE
Klaar! Je kunt sketches via seriële poort uploaden of via WiFi (handig later). De getting started en developers guides zijn nuttig.

Om de microcontroller WiFi rechtstreeks in je sketch te laten gebruiken, ssh naar de HDK en zet een bit om Arduino Yun-bibliotheekcompatibiliteit in te schakelen.


WiFi-client en servocontroller
Dankzij Yun Bridge-bibliotheekcompatibiliteit en Arduino IDE is bestaande code makkelijk aan te passen. De HDK polt de onboard-webserver voor de ventilatiestand (boven, beneden, heel huis) en stuurt de twee servos daarbij aan. In de video draaide dit op een Raspberry Pi 2, maar ik porteerde de WebApp naar de LinkIt (code bijgevoegd).
Mijn WebApp draait op PHP. Installeer via opkg (inbegrepen in OpenWRT op LinkIt):
opkg update
opkg install php7 php7-cgi
Update /etc/config/uhttpd om PHP te interpreteren (regel toevoegen) en herstart uHTTPd.
Hardware
De servo-arm is direct aan de ventilatie bevestigd. Ik maakte een aluminiumbeugel met RVS-afstandsbusjes om de servo te fixeren. Nog iets spel – ik ga tyraps toevoegen voor permanentere montage.


Software
De build bestaat uit drie componenten:
- Temperatuursensors in huis sturen periodiek updates naar de uHTTPd-webserver op de LinkIt.
- Een WebApp op de LinkIt toont de staat en laat handmatige herconfiguratie van ventilaties toe.
- De MCU op de LinkIt stuurt de ventilaties om warme lucht boven of beneden te sturen afhankelijk van tijdstip.

De tempsensors zijn ATtiny85's of Arduino Nano's met DHT11/22, die data via ESP8266 (software serial) naar de webserver sturen. Ik heb een uitgebreide write-up over die sensors (oorspronkelijk fase II van mijn punt-van-gebruik airco-project).
De LinkIt HDK zit op de zolder aangesloten op de duct-ventilaties. Op de OpenWRT-kant updatet een cronjob het tekstbestand vent.txt. De MCU-kant (Arduino sketch) checkt dit bestand periodiek en stuurt de ventilaties aan.
Voor status en handmatige bediening bouwde ik een WebApp gehost op de LinkIt. Met dyndns en port forwarding ben ik van buitenaf bereikbaar.



Ruimte voor verbetering
Vanwege koude nachten moest ik snel deployen – enkele concessies:
- Hardware: 3D-print proper servobeugels (huidige hack-job heeft spel). De RC-servo heeft plastic tandwielen die niet jaren mee gaan; ik swap ze voor metalen tandwielen.
- Toekomst: extra WiFi-servos per kamer, allemaal terug naar één LinkIt.
- Tempsensors dumpen nu naar CSV voor grafieken. Leuk: verwarming vroeger aanzetten bij koud huis, maar mijn WiFi-thermostaat heeft nog geen API. Ook koppeling aan home automation voor op bezetting gebaseerde ventilatieregeling (bewegingssensors) ipv vast tijdschema – handig voor weekends.
Code
LinkIt Smart Duo WiFi Vent C/C++
Deze sketch gebruikt de Bridge en HTTP Client bibliotheken van de Arduino Yun om een webserver te polen en HVAC-ventilaties open/dicht te doen.
/* Adapted from Sweep servo example by BARRAGAN <https://barraganstudio.com> and Yun HTTP Client example by Tom Igoe <https://www.arduino.cc/en/Tutorial/HttpClient> */
/* Code Adapted for HAI (Home Automation w/ Intelligence) by Buddy Crotty */
#include <Servo.h>
#include <Bridge.h>
#include <HttpClient.h>
Servo upservo;
Servo downservo;
int uppos = 0;
int downpos = 0;
const char* host = "192.168.1.80";
int dopenangle = 80;
int dcloseangle = 0;
int uopenangle = 140;
int ucloseangle = 0;
void setup() {
upservo.attach(9);
downservo.attach(10);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
Bridge.begin();
digitalWrite(13, HIGH);
}
void wholehouse() {
if (downpos <= dcloseangle) {
for(downpos = dcloseangle; downpos <= dopenangle; downpos += 1) {
downservo.write(downpos);
delay(20);
}
}
if (uppos <= uopenangle) {
for(uppos = ucloseangle; uppos <= uopenangle; uppos += 1) {
upservo.write(uppos);
delay(20);
}
}
}
void downstairs() {
if (downpos <= dopenangle) {
for(downpos = dcloseangle; downpos <= dopenangle; downpos += 1) {
downservo.write(downpos);
delay(20);
}
}
if (uppos >= ucloseangle) {
for(uppos = uopenangle; uppos >= ucloseangle; uppos -= 1) {
upservo.write(uppos);
delay(20);
}
}
}
void upstairs() {
if (uppos <= uopenangle) {
for(uppos = ucloseangle; uppos <= uopenangle; uppos += 1) {
upservo.write(uppos);
delay(20);
}
}
if (downpos >= dcloseangle) {
for(downpos = dopenangle; downpos >= dcloseangle; downpos -= 1) {
downservo.write(downpos);
delay(20);
}
}
}
void loop() {
HttpClient client;
String cmd = "https://";
cmd += host;
cmd += "/vent.txt";
client.get(cmd);
while (client.available()) {
int c = client.read();
if (c == '2') upstairs();
if (c == '1') downstairs();
if (c == '0') wholehouse();
}
delay(60000);
}
WiFi Temp Sensor C/C++
Verbonden temperatuur- en vochtigheidssensor. Logt data naar centrale Home Automation-server.
/* Code Adapted for HAI by Buddy Crotty */
const char* host = "192.168.1.80";
const char* devID = "downstairs";
#include <SoftwareSerial.h>
SoftwareSerial ser(10, 11);
long utime = 300000;
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
ser.begin(9600);
ser.println("AT+RST");
delay(10);
dht.begin();
Serial.println("Giving everything a chance to warm up");
Serial.println("|-------------------------|");
Serial.print("|");
for(int x = 0; x < 25; x++) { Serial.print("#"); delay(1000); }
Serial.println("|");
Serial.println("Done");
}
void loop() {
float t = dht.readTemperature(true);
int h = dht.readHumidity();
float hi = dht.computeHeatIndex(t, h);
Serial.print("Temperature: "); Serial.print(t); Serial.print(" *F\t");
Serial.print("Heat Index: "); Serial.print(hi); Serial.println(" *F");
Serial.print("Humidity: "); Serial.print(h); Serial.println("%\t");
Serial.print("...connecting to "); Serial.println(host);
String cmd = "AT+CIPSTART=\"TCP\",\""; cmd += host; cmd += "\",80";
ser.println(cmd);
delay(1000);
if(ser.find("Error")) { Serial.println("AT+CIPSTART error"); return; }
String getStr = "GET /tempupdate.php?ID="; getStr += devID;
getStr += "&field1="; getStr += t;
getStr += "&field2="; getStr += h;
getStr += "&field3="; getStr += hi;
getStr += "\r\n\r\n";
Serial.print("Sending data URL: "); Serial.println(getStr);
cmd = "AT+CIPSEND="; cmd += String(getStr.length());
ser.println(cmd);
if(ser.find(">")) { ser.print(getStr); Serial.println("Success!"); }
else { ser.println("AT+CIPCLOSE"); Serial.println("Connection Failed"); }
Serial.print("Next update in "); Serial.print(utime / 1000); Serial.println(" seconds");
delay(utime);
}
Vent.php PHP
Status controleren en handmatig ventilaties overschrijven.
<html> <head> <style> ... </style> <link rel="manifest" href="manifest.json"> </head> <body> <div align="center"> <a href="vent.php?zone=2" class="myButton">Upstairs Only</a><br><br> <a href="vent.php?zone=0" class="myButton">Whole House </a><br><br> <a href="vent.php?zone=1" class="myButton">Downstairs Only</a> <br><br> <?php ... ?> </div> </body> </html>
LinkIt Smart Vent Android WebApp JSON
Manifest voor Chrome op Android om de ventilatiecontroller als webapp te openen.
{ "name": "LinkIt Smart Vent", "icons": [...], "start_url": "vent.php", "display": "standalone", "orientation": "portrait" }
Schema's
ATtiny85 of Arduino Nano leest temperatuur via DHT11/22 en WiFi via ESP8266.

Productieproces
- Geïntegreerde QR, RFID en Temperatuurverificatie Toegangscontrolesysteem
- Slimme spaarpot bouwen: Muntenacceptor besturen met Arduino Nano
- Zelfgemaakte Arduino TV-afstandsbediening – Batterij, 3D-geprinte behuizing
- Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
- Twee Stappenmotors Sturen met Arduino Nano & Joystick – Simpele Tutorial
- Een Arduino LED besturen met Cortana via Bluetooth op Windows 10
- Kwaliteitscontrole Verhogen: 3D‑Geprint Tooling Verbetert Productieprecisie
- GÖPEL verbetert kwaliteitscontrole in auto-industrie met Universal Robots' UR10e cobot
- Slim inkoop: AI samensmelten met menselijk inzicht
- Millport SmartLathez 1740 CNC Draaibank – Precisie & Vermogen
- DATA MODUL lanceert 23,1″ ultra‑slank TFT-display met slimme Wi‑Fi‑besturing