Automatizarea casei, controlul casei, casa inteligentă sau casa digitală sunt nume diferite pentru confort, convenienţă, siguranţă şi economisire energetică. Sistemele de economisire a energiei au crescut în importanţă în zilele noastre. Deşi aceste sisteme sunt foarte scumpe, acestea pot fi totuşi la preţuri mai mici dacă sunt realizate de către dumneavoastră. Există multe metode de a controla un sistem pentru casă inteligentă. Unul dintre acestea este prin Ethernet.
de Srdjan Tomic, Mikroelektronika – Software Department
Tot ceea ce este nevoie este de un microcontroler PIC18F4520 şi un cip Ethernet serial ENC28J60. Acest cip este o soluţie minunată şi pentru alte familii de microcontrolere cum sunt AVR, dsPIC etc. Conectorul CviLux CJCBA8HF1Y0 RJ-45 este utilizat pentru conectarea la reţeaua Ethernet. Fie un LED conectat la PORTB.pin0 al microcontrolerului, care simulează o instalaţie casnică ce trebuie controlată.
Compilatorul mikroC pentru PIC conţine biblioteca SPI_Ethernet care simplifică în mod considerabil procesul de scriere a unui program pentru microcontroler. Prin utilizarea câtorva rutine din această bibliotecă, este posibilă crearea programului care va permite instalaţiei electrice din casă să fie controlată printr-un browser web.
Este necesară efectuarea următoarelor operaţii în interiorul programului:
Pasul 1. Crearea unei pagini html prin care se va comanda microcontrolerul.
Se importă în program ca şir de caractere (string).
Pasul 2. Setarea adreselor IP, DNS, Gateway şi Subnet mask obţinută de la furnizorul de servicii de internet.
De exemplu, parametrii reţelei locale pot fi următorii:
IP: 192.168.20.60 (Control System address)
DNS: 192.168.20.1 (Domain Name System address)
GATEWAY: 192.168.20.6 (Gateway address)
SUBNET: 255.255.255.0 (Subnet mask)
Pasul 3. Dezactivarea intrărilor analogice ale PORTB. Pinul microcontrole rului ar trebui să fie şters şi configurat ca ieşire.
Pasul 4. Iniţializarea modulului SPI al microcontrolerului PIC18F4520.
Pasul 5. Iniţializarea modulului cip Ethernet serial ENC28J60.
Pasul 6. Scrierea programului în interiorul funcţiei Spi_Ethernet_userTCP care, după ce va primi comanda prin browser-ul web, va porni/opri LED-ul conectat la PORTB.pin0.
Pasul 7. Citirea datelor primite în buclă infinită.
Cea mai importantă parte a programului este funcţia Spi_Ethernet_userTCP, responsabilă cu procesarea tuturor comenzilor primite. După ce este primită comanda “GET” de la browser-ul web, trimisă de la computer la adresa IP a sistemului de control, microcontrolerul va răspunde cu o pagină web stocată în memorie. Această pagină va fi afişată apoi automat pe ecranul calculatorului de către browser. Când este recepţionată comanda ON, LED-ul conectat la PORTB.pin0 va fi aprins.
În acelaşi mod, când este recepţionată comanda OFF LED-ul va fi stins. Dacă în locul LED-ului este un releu, este posibilă controlarea oricărei instalaţii precum de iluminat, de securitate, de încălzire etc.
Controlul oricărei instalaţii casnice constă din introducerea adresei IP a sistemului de control din browser-ul web şi specificarea comenzilor dorite.
Fireşte că este posibil controlul mai multor pini ai microcontrolerului, ceea ce permite conducerea unui număr mare de instalaţii sau de asemenea a unui sistem complet de automatizare a casei.
Imaginea de pe ecran ilustrează pagina web afişată de către browser-ul web după introducerea adresei IP a sistemului de control. În exemplul oferit, apăsarea butoanelor ON şi OFF produce aprinderea sau stingerea LED-ului, astfel simulând sistemul de control al încălzirii.
Mai jos este o listă a unor funcţii pre-definite conţinute de biblioteca SPI Ethernet Library. Această bibliotecă este integrată în compilatorul mikroC pentru PIC.
Spi_Ethernet_Init()* Iniţializează controlerul ENC28J60
Spi_Ethernet_Enable() Permite transferul în reţea
Spi_Ethernet_Disable() Dezactivează traficul în reţea
Spi_Ethernet_doPacket()* Procesează pachetul primit
Spi_Ethernet_putByte() Stochează un byte
Spi_Ethernet_putBytes() Stochează mai mulţi byte
Spi_Ethernet_putConstBytes() Stochează byte const.
Spi_Ethernet_putString()* Stochează şir de caracterer
Spi_Ethernet_putConstString()* Stochează o const. şir de caractere
Spi_Ethernet_getByte()* Obţinerea unui byte
Spi_Ethernet_getBytes() Obţinerea mai multor byte
Spi_Ethernet_UserTCP()* Codul de manipulare TCP
Spi_Ethernet_UserUDP() Codul de manipulare UDP
Spi_Ethernet_getIpAddress() Obţinerea adresei IP
Spi_Ethernet_getGwIpAddress() Obţinerea adresei Gateway
Spi_Ethernet_getDnsIpAddress() Obţinerea adresei DNS
Spi_Ethernet_getIpMask() Obţinerea măştii IP
Spi_Ethernet_confNetwork()* Configurarea parametrilor reţelei
Spi_Ethernet_arpResolve() Trimiterea unei cereri ARP
Spi_Ethernet_sendUDP() Trimiterea unui pachet UDP
Spi_Ethernet_dnsResolve() Trimiterea unei cereri DNS
Spi_Ethernet_initDHCP() Trimiterea unei cereri DHCP
Spi_Ethernet_doDHCPLeaseTime() Timp de proces
Spi_Ethernet_renewDHCP() Cerere de reînnoire DHCP
*Funcţii SPI Ethernet Library utilizate în program
Alte mikroC pentru funcţii PIC utilizate în program:
Spi_Init() Iniţializează modulul SPI al microcontrolerului
memcpy() Copiază locaţiile de memorie RAM ale microcontrolerului
memcmp() Compară locaţiile de memorie RAM ale microcontrolerului
NOTÃ
Programul pentru acest exemplu scris pentru microcontrolerul PIC® în C, Basic şi Pascal, dar pe pagina de web www.mikroe.com/en/article/ pot fi găsite şi programele scrise pentru microcontrolerele dsPIC® şi AVR®.
Contact
MikroElektronika
www.mikroe.com
mikroC® şi mikroC PRO® sunt mărci înregistrate ale companiei MikroElektronika. Toate drepturile rezervate. Microchip®, logo-ul şi combinaţii ale acestora, PIC® şi alte mărci înregistrate sunt mărci ale Microchip Corporation sau ale subsidiarilor acestuia. Alţi termeni sau nume de produse pot fi de asemenea mărci comerciale ale altor companii.