BASCOM, a projekt MySensors
- pimowo
- Posty: 392
- Rejestracja: 28 maja 2016, 10:07
BASCOM, a projekt MySensors
Hej,
Nie wiedziałem gdzie umieścić swoje pytanie i dlatego wylądowało w "Inne"
Nie wiem czy znacie projekt MySensors, ale jest to dość ciekawe rozwiązanie dla automatyki domu. Cały projekt opiera się o Arduino i wszytko pisane jest w Arduino IDE.
Do meritum... czy da się jakoś zrobić (napisać) "klienta" w BASCOM, który byłby w stanie "gadać" z bramą (bezprzewodową, radiową lub przewodową, RS485) MySensors?
Piotrek
Nie wiedziałem gdzie umieścić swoje pytanie i dlatego wylądowało w "Inne"
Nie wiem czy znacie projekt MySensors, ale jest to dość ciekawe rozwiązanie dla automatyki domu. Cały projekt opiera się o Arduino i wszytko pisane jest w Arduino IDE.
Do meritum... czy da się jakoś zrobić (napisać) "klienta" w BASCOM, który byłby w stanie "gadać" z bramą (bezprzewodową, radiową lub przewodową, RS485) MySensors?
Piotrek
- Pikczu
- Posty: 392
- Rejestracja: 17 sie 2015, 13:46
- Lokalizacja: Dublin, Ireland
- Kontakt:
Re: BASCOM, a projekt MySensors
Pewnie że się da. Tylko czy jest sens?
Całe to arduino to taka jedna wielka prowizorka, wiesz wszytko takie "patykiem podparte"
Nie wyobrażam sobie mieć wszędzie takiej prowizorki.
jeśli bardzo chcesz to Server MQTT postawisz na raspberry PI. a resztę można skrobać w bascomie.
Tylko życia ci braknie żeby to wszytko skończyć.
Całe to arduino to taka jedna wielka prowizorka, wiesz wszytko takie "patykiem podparte"
Nie wyobrażam sobie mieć wszędzie takiej prowizorki.
jeśli bardzo chcesz to Server MQTT postawisz na raspberry PI. a resztę można skrobać w bascomie.
Tylko życia ci braknie żeby to wszytko skończyć.
- pimowo
- Posty: 392
- Rejestracja: 28 maja 2016, 10:07
Re: BASCOM, a projekt MySensors
Chyba jednak zbyt skrótowo napisałem
Nie chcę żadnych płytek Arduino, jak coś to zbuduję swoje własne PCB dla sterownika/klienta. Chodzi mi tylko (i aż) o komunikację.
Całość dosyć fajnie działa (MySensors + Domoticz) ale niestety nie kumam tego całego Arduino i chciałbym swojego klienta napisać w BASCOM.
Nie chcę żadnych płytek Arduino, jak coś to zbuduję swoje własne PCB dla sterownika/klienta. Chodzi mi tylko (i aż) o komunikację.
Całość dosyć fajnie działa (MySensors + Domoticz) ale niestety nie kumam tego całego Arduino i chciałbym swojego klienta napisać w BASCOM.
- Pikczu
- Posty: 392
- Rejestracja: 17 sie 2015, 13:46
- Lokalizacja: Dublin, Ireland
- Kontakt:
Re: BASCOM, a projekt MySensors
No to kolego drogi pewnie że się da
Trzeba tylko MQTT postawić i wio.
A komunikacja to banał, chętnie coś skrobnę.
Tylko musimy ustalić jakąś wspólną platformę.
Trzeba tylko MQTT postawić i wio.
A komunikacja to banał, chętnie coś skrobnę.
Tylko musimy ustalić jakąś wspólną platformę.
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: BASCOM, a projekt MySensors
Te bramy to chyba nic skomplikowanego. Ta bezprzewodowa to na NRF24. Biblioteka się tu gdzieś do tego wala
Z tego co pamiętam to do tej biblioteki możesz wysyłać stringi jak i surowe bajty.
Wystarczy chyba zrozumieć co tam wysłać. Zobacz na protokół - LINK
Wstawisz parę bajtów i wyślesz. Może tylko trzeba się przyjrzeć jakie mają ustawienia (AES, BURST, NET_ID czy rozgłoszeniowo itp..)
Z tego co pamiętam to do tej biblioteki możesz wysyłać stringi jak i surowe bajty.
Wystarczy chyba zrozumieć co tam wysłać. Zobacz na protokół - LINK
Wstawisz parę bajtów i wyślesz. Może tylko trzeba się przyjrzeć jakie mają ustawienia (AES, BURST, NET_ID czy rozgłoszeniowo itp..)
- pimowo
- Posty: 392
- Rejestracja: 28 maja 2016, 10:07
Re: BASCOM, a projekt MySensors
Myślałem, że da się jakoś zrobić klienta w BASCOM, ale żeby komunikował w "standardzie" MySensors i poprzez ich bramę.
Wszytko po to aby działało z ich standardem.
Nie chcę robić jakiś swoich standardów.
EDYTA
Tak sobie teraz myślę, że cały pić polega na tym, że w Arduino mają bibliotekę MySensors która komunikuje się w jakimś tam standardzie i to wszytko. Muszę do tego przysiąść i spróbuje to rozgryźć.
Cały problem polega na tym, że proste rzeczy mogę skopiować bo oni dość dużo tego zrobili, ale jak bym chciał coś większego i swojego zrobić to nie jest tak różowo bo nie znam Arduino. W BASCOM coś tam rozumiem i chcę to jakoś wszytko razem ożenić
Wszytko po to aby działało z ich standardem.
Nie chcę robić jakiś swoich standardów.
EDYTA
Tak sobie teraz myślę, że cały pić polega na tym, że w Arduino mają bibliotekę MySensors która komunikuje się w jakimś tam standardzie i to wszytko. Muszę do tego przysiąść i spróbuje to rozgryźć.
Cały problem polega na tym, że proste rzeczy mogę skopiować bo oni dość dużo tego zrobili, ale jak bym chciał coś większego i swojego zrobić to nie jest tak różowo bo nie znam Arduino. W BASCOM coś tam rozumiem i chcę to jakoś wszytko razem ożenić
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: BASCOM, a projekt MySensors
Jakby co to mamy tu na Forum dział "Translator"
Nie wiem tylko co tu żenić skoro te czujniki są już oprogramowane. Chcesz podłączyć do tego systemu jakiś nieobsługiwany czujnik/wyjście?
Nie wiem tylko co tu żenić skoro te czujniki są już oprogramowane. Chcesz podłączyć do tego systemu jakiś nieobsługiwany czujnik/wyjście?
- pimowo
- Posty: 392
- Rejestracja: 28 maja 2016, 10:07
Re: BASCOM, a projekt MySensors
Chciałbym swoje sterowniki podłączyć do tego systemu.
Przykładowo mam moduł z przekaźnikami, który komunikuje się po RS485 i zamiast używać swojego protokołu komunikacji to chciałbym używać protokołu MySensors.
Łatwiej mi się posługiwać językiem BASCOM niż Arduino
Przykładowo mam moduł z przekaźnikami, który komunikuje się po RS485 i zamiast używać swojego protokołu komunikacji to chciałbym używać protokołu MySensors.
Łatwiej mi się posługiwać językiem BASCOM niż Arduino
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: BASCOM, a projekt MySensors
Nie wiem jaki tam masz procesor, ale zrobiłem taki pierwszy szkic.
Na końcu można by z tego zrobić taką bibliotekę żeby to można było zastosować dla USART albo NRF24
Na końcu można by z tego zrobić taką bibliotekę żeby to można było zastosować dla USART albo NRF24
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m2560def.dat" '256K FLASH, 8K SRAM, 4K EEPROM
- $crystal = 16000000
- $hwstack = 128
- $swstack = 128
- $framesize = 255
- 'mySensors constans
- Const Node_id = 5
- Const Sensor_id = 5
- Const Max_usb_out_command_len = 150
- Const Max_usb_in_command_len = 50
- '*****************************************************************
- '* CONFIG BUFFERED USART FOR DEBUG via USB *
- '*****************************************************************
- Config Com1 = 115200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
- Echo Off
- Config Serialin0 = Buffered , Size = Max_usb_in_command_len 'RX from Terminal
- Dim Char As Byte , Cmd_timeout1 As Byte , Got_str1 As Byte
- Dim Command1 As String * Max_usb_in_command_len
- Dim Cmd_buff(max_usb_in_command_len + 1) As Byte At Command1 Overlay
- Config Serialout0 = Buffered , Size = Max_usb_out_command_len 'TX to the Terminal
- Open "COM1:" For Binary As #1
- Const Usb = 1 'alias dla portu com
- '****************************************************************
- Enable Interrupts 'dla buforowanego USART odbieranego w przerwaniu
- Do
- '--[ USART0 COM1 USB ]------------------------
- If 0 < Ischarwaiting(#usb) Then
- Char = Inkey(#usb)
- Select Case Char
- Case 10 : Got_str1 = 1 'odebrano znak nowej linii
- Case 13 :
- Case Else
- Command1 = Command1 + Chr(char)
- End Select
- If Len(command1) > 49 Then Got_str1 = 1
- If Got_str1 = 0 Then Cmd_timeout1 = 50 '50x10ms
- 'end if Ischarwaiting
- End If
- '--[ PARSE COM1 USB ]-------------------------
- If Got_str1 = 1 Then
- '|NODE_ID|SENSOR_ID|COMMAND|ACK|TYPE|PAYLOAD|
- If Cmd_buff(1) = Node_id Then 'jeśli to adresowane do nas
- If Cmd_buff(2) = Sensor_id Then
- Select Case Cmd_buff(3)
- Case 0 'presentation
- Case 1 'set
- Select Case Cmd_buff(4) 'czy mamy nadać potwierdzenie?
- Case 0 'bez potwierdzenia
- Case 1 'z potwierdzeniem
- End Select
- 'w piątym bajcie powinien być jakiś "typ"
- 'od szóstego bajtu mamy wiadomość
- 'i teraz zależy czy to coś "bajtowego" czy string :D
- Case 2 'request
- Case 3 'internal
- Case 4 'OTA
- End Select
- End If
- End If
- Got_str1 = 0
- Command1 = ""
- Cmd_timeout1 = 0
- End If
- '--[ TIMER2 10ms ]----------------------------
- If Tifr2.ocf2a = 1 Then
- Tifr2.ocf2a = 1
- 'COM1 USB
- If Cmd_timeout1 > 0 Then
- Decr Cmd_timeout1
- If Cmd_timeout1 = 0 Then
- 'Got_str1 = 1 'mozna wymusić parsowanie
- Command1 = ""
- End If
- End If
- End If
- Loop
- pimowo
- Posty: 392
- Rejestracja: 28 maja 2016, 10:07
Re: BASCOM, a projekt MySensors
Bardzo dziękuję za kod, będę próbował to jakoś teraz ogarnąćniveasoft pisze:zrobiłem taki pierwszy szkic.
Moduł od którego chciałbym zacząć jest na ATmega8 z kwarcem 11.0592MHz, ale miałem w planach wymianę na ATmega328 i kwarc 16MHz, aby dostosować się do Arduino (UNO, NANO, etc)niveasoft pisze:Nie wiem jaki tam masz procesor
Na tą chwilę wszytko mam spięte na płytce stykowej z ATmega328 z kwarcem 16MHz i wszytko podpięte jak w docelowym module.
Kod Arduino skleciłem na podstawie podpatrzonych kodów jak to robią inni i wszytko działa jak bym chciał - sterowanie ośmioma przekaźnikami poprzez osiem przycisków i/lub Domoticz (bramka MySensors) Wgrałem bootloader Arduino UNO. Miałem troszkę problemów ponieważ biblioteka MySensors używa programowego UART, a ja mam MAX485 podpięty pod sprzętowy, ale u dało się.
Kod Arduino wygląda tak:
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- #define MY_RS485 //komunikacja przewodowa RS485
- #define MY_RS485_DE_PIN 4 //sterowanie kierunkiem odbiór/nadawanie
- #define MY_RS485_BAUD_RATE 9600 //prędkość sieci RS485
- #define MY_RS485_HWSERIAL Serial //włączony sprzętowy UART
- #define MY_SPLASH_SCREEN_DISABLED //wyłączone powitanie UART
- #define MY_NODE_ID 1 //adres modułu w sieci
- #define SN "SocketNT_RS485" //nazwa modułu
- #define SV "1.0" //wersja firmware
- #include <MySensors.h> //biblioteka MySensors
- #include <Bounce2.h> //programowa eliminacja drgania styków
- #define RELAY_ON 1 //przekaźnik włączony
- #define RELAY_OFF 0 //przekaźnik wyłączony
- #define noRelays 8 //ilość przekaźników
- const int relayPin[] = {5, 3, 19, 18, 17, 16, 15, 14}; //piny przekaźników
- const int buttonPin[] = {13, 12, 11, 10, 9, 8, 7, 6}; //piny przycisków
- class Relay {
- public:
- int buttonPin;
- int relayPin;
- boolean relayState;
- };
- Relay Relays[noRelays];
- Bounce debouncer[noRelays];
- MyMessage msg[noRelays];
- void setup() {
- for (int i = 0; i < noRelays; i++) {
- Relays[i].buttonPin = buttonPin[i];
- Relays[i].relayPin = relayPin[i];
- msg[i].sensor = i;
- msg[i].type = V_LIGHT;
- pinMode(Relays[i].buttonPin, INPUT_PULLUP);
- pinMode(Relays[i].relayPin, OUTPUT);
- digitalWrite(Relays[i].relayPin, Relays[i].relayState ? RELAY_ON : RELAY_OFF);
- send(msg[i].set(Relays[i].relayState ? true : false));
- debouncer[i] = Bounce();
- debouncer[i].attach(buttonPin[i]);
- debouncer[i].interval(5);
- }
- }
- void presentation() {
- sendSketchInfo(SN, SV);
- for (int i = 0; i < noRelays; i++)
- present(i, S_LIGHT);
- }
- void loop() {
- for (byte i = 0; i < noRelays; i++) {
- if (debouncer[i].update()) {
- int value = debouncer[i].read();
- if ( value == LOW) {
- Relays[i].relayState = !Relays[i].relayState;
- digitalWrite(Relays[i].relayPin, Relays[i].relayState ? RELAY_ON : RELAY_OFF);
- send(msg[i].set(Relays[i].relayState ? true : false));
- }
- }
- }
- }
- void receive(const MyMessage &message) {
- if (message.type == V_LIGHT) {
- if (message.sensor < noRelays) {
- Relays[message.sensor].relayState = message.getBool();
- digitalWrite(Relays[message.sensor].relayPin, Relays[message.sensor].relayState ? RELAY_ON : RELAY_OFF);
- }
- }
- }
To już byłaby bajkaniveasoft pisze:Na końcu można by z tego zrobić taką bibliotekę żeby to można było zastosować dla USART albo NRF24