ISLAND1010 – I/O pro Raspberry PI, komunikace CAN
Řídící jednotka ISLAND 1010 určená pro Raspberry Pi.
Projektem „Pro Raspberry Pi“ reagujeme na rozšířenou skupinu uživatelů používající tento mini počítač. Jelikož se naše firma zabývá vývojem a výrobou elektroniky a vlastního software, máme tak možnost nabídnout uživatelům HW i SW řešení rozšiřujících „ostrůvků“.
Dostupnost modulů a možnost objednání naleznete na www.allcomp.cz kategorie Produkty a Raspberry Pi.
Jako první bychom rádi představili modul ISLAND 1010:
Jednotka určená pro komunikaci s řídícím počítačem Raspberry Pi. Hlavní záměr možnosti využítí jednotky ISLAND 1010 je pro domácí automatizaci, SmartHouse, telemetrii a podobné aplikace.
ISLAND 1010 umožňuje ovládat 10 výstupů 12V / 10mA a vyhodnocovat 10 digitálních vstupů I/O.
Propojení více řídících jednotek lze topologií: Ring, Mesh, Star, Line, Tree, Bus – pomocí 4 drátů – 2 komunikace CAN a 2 napájení 12V.
Komunikaci mezi Raspberry Pi a ostrůvky ISLAND 1010 zabezpečuje převodník RxTx / CAN.
Jako vstupy do řídící jednotky je možné použít tlačítka, vypínače, snímače pohybu, ultrazvukové spínače, magnetické spínače a podobně. Pro ovládání výkonových periférií (osvětlení, zásuvek, motorů…), je nutné výstupy spínat například Relé, SSRelé apodobně…
Naše moduly naleznou uplatnění například:
domácí automatizace
SmartHouse
telemetrie
apod …
Příklad web aplikace projektu SmartHouse Allcomp a.s.
Technické informace:
Počet vstupů: 10x I/O
Počet výstupů: 10x 12V (max 10mA)
Napájení: 12V
Komunikační protokol: CAN
Spuštění a instalace:
1. update aptitude a instalace knihovny libgcj13:
sudo apt-get update
sudo apt-get install libgcj13
2. disable seriové linky pomocí raspi-config:
sudo raspi-config
menu 8 “Advanced Options” , menu A8 “Serial”, poté NO a OK, Finish a reboot
3. stažení aktuálního souboru aplikace AllNet13 – potřebného pro komunikaci mezi Raspberry a Island1010:
wget http://home.allcomp.cz/pub/raspberry/AllNet13
a přiřazení práv:
chmod 755 AllNet13
4. nyní můžete spustit aplikaci AllNet13:
./AllNet13 (enter)
5. Inicializace Isalnd1010 a Diagnostika
Nyní můžete programovat svou aplikaci za použití knihovny netlib.jar ke stažení:
wget http://home.allcomp.cz/pub/raspberry/netlib.jar
DEMO APLIKACE
- Inicializace Island1010 programem: wget http://home.allcomp.cz/pub/raspberry/Init.jar
- Java aplikace pro diagnostiku, vypínání a zapínání výstupů, zjištění stavu vstupů ke stažení zde: wget http://home.allcomp.cz/pub/raspberry/AllDiag.jar
a přiřazení práv:
chmod 755 Init.jar
chmod 755 AllDiag.jar
Demoaplikaci spustíme v terminálu startx pomocí příkazu:
java -jar Init.jar
java -jar AllDiag.jar
Nyní je vše připraveno na komunikaci s jednotkami ISLAND 1010.
Testovací aplikace (AllDiag.jar), popis komunikace (AllNet.idl) a DEMO aplikace jsou též přístupné na adrese http://home.allcomp.cz/pub/raspberry/.
Vlastní programování
- Příklad jednoduchého programu v prostředí NetBeans.
- nastavení digitálního výstupu na true
- při změně vstupu na jednotce výpis na terminál
- knihovna pro vlastní projekty zde: netlib.jar
- níže uvedený projekt ke stažení zde: 1_JavaApplication_NetBeans.zip
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
package JavaApplication; import cz.allcomp.netlib.NetBridge; import java.util.HashMap; import cz.allcomp.shs.allcomplib.transducers.EwcNonExist; import java.util.logging.Level; import java.util.logging.Logger; public class Program extends NetBridge { public static void main(String[] args) { Program program = new Program("127.0.0.1", 1050); //Vytvoření instance Bridge, parametry: String (ip adresa Net Serveru), int (port Net Serveru) program.getActiveEwcs().add(1); //Nastavení aktivních EWC jednotek program.createBridge(); //Propojení s Net Serverem (provádí se po nastavení aktivních EWC jednotek) short ewc = 1; //Proměnná obsahující ID EWC jednotky short io = 0; //Proměnná obsahující ID výstupu na EWC jednotce try { program.setDigital(ewc, io, true); //Nastaví digitální hodnotu výstupu na zapnuto (true, popř. vypnuto - false) } catch (EwcNonExist e) { e.printStackTrace(); } while(true) { //nekonečná smyčka držící program spuštěný try { Thread.sleep(500); } catch (InterruptedException ex) { Logger.getLogger(Program.class.getName()).log(Level.SEVERE, null, ex); } } } public Program(String netIp, int netPort) { super(netIp, netPort); } @Override public void onDigitalChange(short ewc, HashMap<Integer, Short> ewcStates) { System.out.println("Zmena stavu IO na EWC (" + ewc + ") " + ewcStates.toString()); } } |
.