Реле контролируется Arduino через HC12 на малиновый пи - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь реализовать беспроводной датчик влажности почвы, используя HC12, подключенный к Arduino, для отправки сигнала (значения: 0-100%), чтобы затем активировать реле, подключенное к Raspberry Pi 3, в зависимости от конкретногопроцент (например: 20% вкл., 90% вкл.).Я понял, как отправить значения, и я могу видеть их на пи, но я не могу активировать реле.Пожалуйста помоги.

Это код, который я использую:

import RPi.GPIO as GPIO 
import smtplib 
import time
from time import sleep 
import serial

GPIO.setmode(GPIO.BCM)  # Set our GPIO numbering to BCM
relay_pin = 16
GPIO.setup(relay_pin, GPIO.OUT)
GPIO.output(relay_pin, 1) 

ser = serial.Serial ("/dev/ttyS0",9600)   #Open port with baud rate

try:
    while True:
        received_data = ser.read()              #read serial port
        data_left = ser.inWaiting()             
        received_data += ser.read(data_left)
        print (received_data)                   #print received data
        ser.write(received_data)                #transmit data serially

        if received_data <= '20':
            GPIO.output(relay_pin, 0)
        elif received_data >= '90':
            GPIO.output(relay_pin, 1)

except KeyboardInterrupt:
    pass
GPIO.cleanup()

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

У меня все еще проблемы с кодом, и как только я изменил код на: если int (receive_data) <= 20, появляется сообщение об ошибке.Это модифицированный код: </p>

import RPi.GPIO as GPIO 
import smtplib 
import time
from time import sleep 
import serial

GPIO.setmode(GPIO.BCM)  # Set our GPIO numbering to BCM
relay_pin = 16
GPIO.setup(relay_pin, GPIO.OUT)
GPIO.output(relay_pin, GPIO.HIGH) 

ser = serial.Serial ("/dev/ttyS0",9600)  

try:
    while True:
        received_data = ser.read()   #read serial port
        data_left = ser.inWaiting()             
        received_data += ser.read(data_left)
        print (received_data)     #print received data
        ser.write(received_data) #transmit data serially

        if int(received_data) <= 20:
            GPIO.output(relay_pin, GPIO.HIGH)
        elif int(received_data) >= 90:
            GPIO.output(relay_pin, GPIO.LOW)
        else:
            GPIO.output(relay_pin, GPIO.LOW)

except KeyboardInterrupt:
    pass
GPIO.cleanup()

Однако, когда я удаляю "if int (receive_data) <= 20" и оставляю код как: </p>

import RPi.GPIO as GPIO 
import smtplib 
import time
from time import sleep 
import serial

GPIO.setmode(GPIO.BCM)  # Set our GPIO numbering to BCM
relay_pin = 16
GPIO.setup(relay_pin, GPIO.OUT)
GPIO.output(relay_pin, GPIO.HIGH) 

ser = serial.Serial ("/dev/ttyS0",9600)  

try:
    while True:
        received_data = ser.read()   #read serial port
        data_left = ser.inWaiting()             
        received_data += ser.read(data_left)
        print (received_data)     #print received data
        ser.write(received_data) #transmit data serially

        if received_data <= 20:
            GPIO.output(relay_pin, GPIO.HIGH)
        elif received_data >= 90:
            GPIO.output(relay_pin, GPIO.LOW)
        else:
            GPIO.output(relay_pin, GPIO.LOW)

except KeyboardInterrupt:
    pass
GPIO.cleanup()

Реле поворачиваетсявключен, но не реагирует на последовательные данные, полученные от Arduino и датчика влажности почвы.Я подумал, может быть, определить последовательные данные от Arduino, чтобы сказать: включите реле при 20% влажности и выключите, когда влажность почвы составляет 90%, и, следовательно, определите значение 20% как «1» или какGPIO.HIGH, чтобы включить реле, или наоборот, но я не знаю, как этого добиться.Любой совет?

0 голосов
/ 05 февраля 2019

Я думаю, проблема в утверждении if.

if received_data <= '20':
    GPIO.output(relay_pin, 0)
elif received_data >= '90':
    GPIO.output(relay_pin, 1)

'20' - это строка, а не число.
Попробуйте удалить кавычки, как показано ниже:

if received_data <= 20:
    GPIO.output(relay_pin, 0)
elif received_data >= 90:
    GPIO.output(relay_pin, 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...