[Железо] OrangePi PC + 315/433 МГц приемник/передатчик

Работа с конкретным оборудованием

Модераторы: immortal, newz20

immortal
Сообщения: 1138
Зарегистрирован: Вт янв 29, 2013 9:16 am
Откуда: Белозерск
Благодарил (а): 16 раз
Поблагодарили: 400 раз
Контактная информация:

[Железо] OrangePi PC + 315/433 МГц приемник/передатчик

Сообщение immortal » Пн окт 02, 2017 10:49 pm

Настроил приемник и передатчик 315/433 МГц на OrangePiPC
на RaspberryPi аналогично, только вместо WiringOP надо WiringPi

подключение:
приемник на ногу 7 (GPIO7) 15 (GPIO3)
передатчик на ногу 12 (GPIO1) 16 (GPIO4)
Можно изменить на другие.

1. Устанавливаем WiringOP

Код: Выделить всё

git clone https://github.com/zhaolei/WiringOP.git -b h3 
cd WiringOP
chmod +x ./build
sudo ./build
проверяем работу

Код: Выделить всё

gpio readall
СпойлерПоказать

Код: Выделить всё

+-----+-----+----------+------+---+-Orange Pi+---+---+------+---------+-----+--+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 |     |     |     3.3v |      |   |  1 || 2  |   |      | 5v       |     |     |
 |  12 |   8 |    SDA.0 | ALT5 | 0 |  3 || 4  |   |      | 5V       |     |     |
 |  11 |   9 |    SCL.0 | ALT5 | 0 |  5 || 6  |   |      | 0v       |     |     |
 |   6 |   7 |   GPIO.7 | ALT2 | 0 |  7 || 8  | 1 | OUT  | TxD3     | 15  | 13  |
 |     |     |       0v |      |   |  9 || 10 | 0 | ALT4 | RxD3     | 16  | 14  |
 |   1 |   0 |     RxD2 | ALT5 | 0 | 11 || 12 | 0 | ALT3 | GPIO.1   | 1   | 110 |
 |   0 |   2 |     TxD2 | ALT5 | 1 | 13 || 14 |   |      | 0v       |     |     |
 |   3 |   3 |     CTS2 | ALT3 | 0 | 15 || 16 | 0 | ALT3 | GPIO.4   | 4   | 68  |
 |     |     |     3.3v |      |   | 17 || 18 | 0 | ALT3 | GPIO.5   | 5   | 71  |
 |  64 |  12 |     MOSI | ALT4 | 0 | 19 || 20 |   |      | 0v       |     |     |
 |  65 |  13 |     MISO | ALT4 | 0 | 21 || 22 | 0 | OUT  | RTS2     | 6   | 2   |
 |  66 |  14 |     SCLK | ALT4 | 0 | 23 || 24 | 0 | ALT4 | CE0      | 10  | 67  |
 |     |     |       0v |      |   | 25 || 26 | 0 | ALT3 | GPIO.11  | 11  | 21  |
 |  19 |  30 |    SDA.1 | ALT4 | 0 | 27 || 28 | 0 | ALT4 | SCL.1    | 31  | 18  |
 |   7 |  21 |  GPIO.21 | ALT3 | 0 | 29 || 30 |   |      | 0v       |     |     |
 |   8 |  22 |  GPIO.22 | ALT3 | 0 | 31 || 32 | 0 | ALT3 | RTS1     | 26  | 200 |
 |   9 |  23 |  GPIO.23 | ALT3 | 0 | 33 || 34 |   |      | 0v       |     |     |
 |  10 |  24 |  GPIO.24 | ALT3 | 0 | 35 || 36 | 0 | ALT3 | CTS1     | 27  | 201 |
 |  20 |  25 |  GPIO.25 | ALT3 | 0 | 37 || 38 | 0 | ALT5 | TxD1     | 28  | 198 |
 |     |     |       0v |      |   | 39 || 40 | 0 | ALT5 | RxD1     | 29  | 199 |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+-Orange Pi+---+------+----------+-----+-----+
2. Устанавливаем 433Utils

Код: Выделить всё

git clone --recursive git://github.com/ninjablocks/433Utils.git
cd 433Utils/RPi_utils
перед тем как делать make надо поменять порты к которым подключены приемник и передатчик
правим файлы: RFSniffer.cpp, codesend.cpp и send.cpp
находим там строчку в которой задается порт
int PIN = 0;
для RFSniffer.cpp порт 7 (3)
для codesend.cpp и send.cpp порт 1 (4)
Так же нам надо чтобы RFSniffer отправлял код в MajorDomo, поскольку в си мудрено отправляются http запросы я сделал из программы запуск bash скрипта, RFSniffer.cpp должен иметь следующий вид
RFSniffer.cppПоказать

Код: Выделить всё

/*
  RFSniffer

  Usage: ./RFSniffer [<pulseLength>]
  [] = optional

  Hacked from http://code.google.com/p/rc-switch/
  by @justy to provide a handy RF code sniffer
*/

#include "../rc-switch/RCSwitch.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

     
     
RCSwitch mySwitch;
int rfcode;
char sendrf;
char sendrf2[30];


int main(int argc, char *argv[]) {
  
     // This pin is not the first pin on the RPi GPIO header!
     // Consult https://projects.drogon.net/raspberry-pi/wiringpi/pins/
     // for more information.
     int PIN = 3;
     
     if(wiringPiSetup() == -1) {
       printf("wiringPiSetup failed, exiting...");
       return 0;
     }

     int pulseLength = 0;
     if (argv[1] != NULL) pulseLength = atoi(argv[1]);

     mySwitch = RCSwitch();
     if (pulseLength != 0) mySwitch.setPulseLength(pulseLength);
     mySwitch.enableReceive(PIN);  // Receiver on interrupt 0 => that is pin #2
     
    
     while(1) {
  
      if (mySwitch.available()) {
    
        int value = mySwitch.getReceivedValue();
    
        if (value == 0) {
          printf("Unknown encoding\n");
        } else {    

      rfcode = mySwitch.getReceivedValue();
          //printf("Received %i\n", rfcode );

char sendrf[10] = "./sendmd ";
sprintf(sendrf2, "%u",rfcode );
strcat (sendrf, sendrf2);
//printf ("%s",sendrf);
popen (sendrf, "r");

        }
    
        mySwitch.resetAvailable();
    
      }
sleep (1);
  }
  exit(0);
}
обязательно необходимо указывать параметр sleep (); можно его установить 0.5 секунды, если убрать то программа будет сильно грузить процессор и могут быть двойные срабатывания.
при получении кода он запускает bash скрипт с именем sendmd который должен находиться вместе с программой RFSniffer
у меня sendmd запускает стандартный сценарий RCSwitch и передает ему код, можно заменить на свой
sendmdПоказать
теперь можно делать:
если не компилируется и выдает ошибкиПоказать
ошибка:

Код: Выделить всё

make: *** Нет правила для сборки цели «../rc-switch/RCSwitch.o», требуемой для «send». Останов.
решение:

Код: Выделить всё

cd 433Utils
git submodule init
git submodule update
cd RPi_utils
make
ошибка:

Код: Выделить всё

g++ -DRPI   -c -o ../rc-switch/RCSwitch.o ../rc-switch/RCSwitch.cpp
g++ -DRPI   -c -o send.o send.cpp
g++ -DRPI  ../rc-switch/RCSwitch.o send.o -o send -lwiringPi
//usr/local/lib/libwiringPi.so: undefined reference to `pthread_join'
//usr/local/lib/libwiringPi.so: undefined reference to `pthread_create'
//usr/local/lib/libwiringPi.so: undefined reference to `pthread_cancel'
collect2: error: ld returned 1 exit status
Makefile:8: recipe for target 'send' failed
make: *** [send] Error 1
решение:
в файле /433Utils/RPi_utils/Makefile
в трех строках после
-lwiringPi добавить через пробел параметр -lpthread
теперь в консоли можно получать данные и и отправлять, но нам надо это делать в МД
3. Устанавливаем pi-switch-python
ставим необходимые пакеты

Код: Выделить всё

sudo apt-get install python-dev libboost-python-dev python-pip
устанавливаем pi-switch-python

Код: Выделить всё

git clone https://github.com/lexruee/pi-switch-python.git
cd pi-switch-python
sudo python setup.py install
Теперь нам надо чтобы код отсылал в МД данные, для этого надо модифицировать файл resiever, пользователь devoff модифицировал файл но у него под питон 3, у меня был питон 2.7 по этому мой файл выглядит так:
СпойлерПоказать

Код: Выделить всё

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
@author     Alexander Rüedlinger <a.rueedlinger@gmail.com>
@date       30.07.2015

"""
#for python3:
#import requests
#for python2.7
import urllib
#---------------
from pi_switch import RCSwitchReceiver
import time

receiver = RCSwitchReceiver()
#порт приемника
receiver.enableReceive(7)

num = 0


while True:
#      receiver.enableReceive(2)

#      print "Start : %s" % time.ctime()
      time.sleep( 0.1 )
#      print "End : %s" % time.ctime()
      
      if receiver.available():
         received_value = receiver.getReceivedValue()

         if received_value:
            num += 1
            #for python3
            #url = 'http://192.168.1.20/objects/?object=RCSwitch&op=set&p=code'
            #payload = {'v':received_value }
            #r = requests.get(url, params=payload)
            #print(r.url)
            #for python2.7
            rec_code = str(received_value)
            url = "http://localhost/objects/?script=RCSwitch&rcswitch=" + rec_code
            page = urllib.urlopen(url)
            text = page.read()
            page.close()
            #------------------

            print("Received[%s]:" % num)
            print(received_value)
            print("%s / %s bit" % (received_value, receiver.getReceivedBitlength()))
            print("Protocol: %s" % receiver.getReceivedProtocol())
            print("")
 
            receiver.resetAvailable()
time.sleep (0.2)
 
измените строку МД на свою, в данном примере используется стандартный сценарий RCSwitch который идет по умолчанию в МД
если питон 3 то раскоментируйте строки для питона 3 и закоментируйте для питона 2.7

сохраняем файл с названием pi_receiver.py
добавляем в загрузку этот файл под root, например rc.local
sudo python /root/pi_receiver.py
теперь код будет посылаться в МД.
В МД сценарий делаем например так

Код: Выделить всё

$id=$params['rcswitch'];
if ($id=='12345') {
 //sensor 1
callMethod("Switch1.switch");
}
if ($id=='12346') {
 //sensor 1
callMethod("Switch2.switch");
}
 
включение/выключение кнопок Switch

Для отправки кода через передатчик копируем из папки 433Utils/RPi_utils файл codesend
вставляем в место откуда надо отправлять код:

Код: Выделить всё

exec ("/var/www/codesend 777777"); 
где 777777 заменяем на свой код.

При чем Вы можете подключить и 315 МГц и 433 МГц приемники и передатчики одновременно на разные порты.

Скомпилированные rfswitch и codesend, а так же исходник RFSniffer.cpp и sendmd в приложенном файле.
архив содержит следующие файлы:
codesend433 - передатчик на GPIO1
codesend315 - передатчик на GPIO3
rfsniffer315 - приемник на GPIO4 (пауза 0,5 сек)
rfsniffer433 - приемник на GPIO7 (пауза 0,5 сек)
RFSniffer.cpp
sendmd
Вложения
rfsniffer.zip
(26.08 КБ) 464 скачивания
За это сообщение автора immortal поблагодарили (всего 3):
burano (Сб фев 17, 2018 9:04 pm) • AlexFox (Сб ноя 09, 2019 3:15 pm) • Nika01 (Пн дек 28, 2020 9:39 pm)
Рейтинг: 3.49%
Lubuntu на cubieboard2 + ds9490R
DietPi на Orange Pi PC + 1wire на esp8266 с прошивкой Homes-smart.ru
immortal
Сообщения: 1138
Зарегистрирован: Вт янв 29, 2013 9:16 am
Откуда: Белозерск
Благодарил (а): 16 раз
Поблагодарили: 400 раз
Контактная информация:

Re: OrangePi PC + 315/433 МГц приемник/передатчик

Сообщение immortal » Ср фев 07, 2018 10:53 am

внес изменения в инструкцию, добавил скомпилированные файлы и сделал запуск снифера не через питон
Lubuntu на cubieboard2 + ds9490R
DietPi на Orange Pi PC + 1wire на esp8266 с прошивкой Homes-smart.ru
Аватара пользователя
VooDooN
Сообщения: 307
Зарегистрирован: Сб июн 11, 2016 12:02 am
Благодарил (а): 170 раз
Поблагодарили: 64 раза

Re: OrangePi PC + 315/433 МГц приемник/передатчик

Сообщение VooDooN » Ср фев 07, 2018 11:52 am

А как дела с нагрузкой на проц? Я подобную штуку делал на RPi3 и там температура проца поднималась больше 70 градусов при включенном снифере. Хотя в обычном режиме была температура 50 градусов.
burano
Сообщения: 13
Зарегистрирован: Вс июн 25, 2017 11:05 pm
Благодарил (а): 5 раз
Поблагодарили: 2 раза

Re: OrangePi PC + 315/433 МГц приемник/передатчик

Сообщение burano » Сб фев 17, 2018 9:08 pm

Автору огромный респект за код на питоне. Поставил модуль, подправил скрипт, сделал событие(не было стандартного). Теперь все радиовыключатели, датчики открытия, движения в чат Телеграмм отправляются.
VooDooN писал(а):А как дела с нагрузкой на проц?
Нагрузка на проц 17-18 % общая. Сам питон во время приема кода грузит проц на 1-3% остальное время менее 1%
Ложные получения кода есть, но я их в сценарии фильтрую.
Вложения
rcswitch.PNG
rcswitch.PNG (161.22 КБ) 16093 просмотра
Raspberry Pi3+ Arduino Mega (AMS) + Arduino Nano
2xk
Сообщения: 11
Зарегистрирован: Пн янв 15, 2018 9:11 pm
Благодарил (а): 3 раза
Поблагодарили: 0

Re: OrangePi PC + 315/433 МГц приемник/передатчик

Сообщение 2xk » Пн мар 12, 2018 12:37 pm

Подскажите как приёмо-передатчик который описан в инструкции должен выглядеть?
так?
Изображение
Берендей
Сообщения: 125
Зарегистрирован: Ср окт 18, 2017 9:44 am
Благодарил (а): 24 раза
Поблагодарили: 18 раз

Re: OrangePi PC + 315/433 МГц приемник/передатчик

Сообщение Берендей » Вт мар 13, 2018 9:06 am

Да, именно так может выглядеть.
Это самый простой и дешевый вариант, но вполне рабочий.
OrangePI PC/ARMBIAN 5.36 + DS3231+433Mhz. Esp8266(ArduinoIDE). Arduino MEGA2560 + Oregon THGN132N.
Sonoff RF Bridge + sensors
DangerD
Сообщения: 1
Зарегистрирован: Вс ноя 25, 2018 10:59 pm
Благодарил (а): 0
Поблагодарили: 0

Re: [Железо] OrangePi PC + 315/433 МГц приемник/передатчик

Сообщение DangerD » Вс ноя 25, 2018 11:02 pm

Подкиньте ссылку на али на приемопередатчик, а то куда подключать есть, а что подключать непонятно)
dmitriytimofeyev
Сообщения: 4
Зарегистрирован: Пт авг 03, 2018 10:52 am
Благодарил (а): 0
Поблагодарили: 0

Re: [Железо] OrangePi PC + 315/433 МГц приемник/передатчик

Сообщение dmitriytimofeyev » Ср дек 19, 2018 1:46 pm

Ребята у кого получилось и работает
- пробывал сделать на raspberry pi 3 b+ самый простой ардуиновский приемник 433 + снифер, который передает все коды, что слышит в mqtt код/ = 1, код1/ = 1 система работает.

проблема приемник подключений к raspberry, также как sonoff basic или ESP -nodemcu слышит только с полуметра.
подключаю через arduino uno - радиус 20 метров.

поставил костыль (надеюсь временно) в виде arduino подключенная к raspberry.
Подскажите куда копать?
lost_post
Сообщения: 21
Зарегистрирован: Вс авг 04, 2019 5:52 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: [Железо] OrangePi PC + 315/433 МГц приемник/передатчик

Сообщение lost_post » Чт янв 16, 2020 6:40 pm

мне кажется дело в питании. ты когда на "raspberry, также как sonoff basic или ESP" запитываешь от 3.3v ?
Arduino ж 5v. Может записать от 5v на raspberry?
Аватара пользователя
andrewee
Сообщения: 5
Зарегистрирован: Ср ноя 25, 2020 3:25 pm
Откуда: Сахалин
Благодарил (а): 0
Поблагодарили: 0

Re: [Железо] OrangePi PC + 315/433 МГц приемник/передатчик

Сообщение andrewee » Вс ноя 29, 2020 1:06 pm

все делаю по инструкции, ну не в какую не заводится ни приемник ни передатчик, такое ощущение что gpio как то отключен, как проверить? выставил приемник к 35 ножке gpio.24 передатчик к 37 gpio.25 и ничего :( - подскажите куда копать - плату orange pi pc менял на другую
Ответить