Closed muyinliu closed 4 years ago
That's not really much information to go off of, I'm afraid I can't help much.
Are you sure your receiver code is functioning correctly? I would test it against a known signal from a remote, and try sending the same exact signal with ir-slinger.
I use sudo mode2 -d /dev/lirc0
to record infrared code.
But code like this record the same codes as output:
import RPi.GPIO as GPIO
import math
import os
from datetime import datetime
from time import sleep
# This is for revision 1 of the Raspberry Pi, Model B
# This pin is also referred to as GPIO23
INPUT_WIRE = 16
GPIO.setmode(GPIO.BOARD)
GPIO.setup(INPUT_WIRE, GPIO.IN)
while True:
value = 1
# Loop until we read a 0
while value:
value = GPIO.input(INPUT_WIRE)
# Grab the start time of the command
startTime = datetime.now()
# Used to buffer the command pulses
command = []
# The end of the "command" happens when we read more than
# a certain number of 1s (1 is off for my IR receiver)
numOnes = 0
# Used to keep track of transitions from 1 to 0
previousVal = 0
while True:
if value != previousVal:
# The value has changed, so calculate the length of this run
now = datetime.now()
pulseLength = now - startTime
startTime = now
command.append((previousVal, pulseLength.microseconds))
if value:
numOnes = numOnes + 1
else:
numOnes = 0
# 10000 is arbitrary, adjust as necessary
if numOnes > 10000:
break
previousVal = value
value = GPIO.input(INPUT_WIRE)
print "----------Start----------"
for (val, pulse) in command:
print val, pulse
print "-----------End-----------\n"
print "Size of array is " + str(len(command))
compare with correct mode2
record result:
space 4176174
pulse 0
space 24
space 15
space 24
space 27
space 26
space 25
pulse 14
space 4339 4344 space
space 4218
space 26
space 25
space 26
space 26
space 26
space 26
space 26
pulse 9 4437 pulse
space 519 493 space
space 1466
space 26
space 26
space 26
space 26
space 26
space 26
space 26
pulse 9 1682 pulse
space 519 496 space
space 370
space 26
space 26
space 26
space 26
space 26
space 26
space 26
pulse 9 586 pulse
space 468 463 space
space 1518
space 26
space 26
space 26
space 30
space 23
space 25
space 26
pulse 9 1709 pulse
...
What does your circuit for the infrared LED look like?
Raspberry Pi 3, circuit like this(the left one is the sender, the right one is the receiver):
Ah, is there a transistor on that LED module? It may be that the Pi doesn't have enough current to drive the LED well enough
But using irsend
command send signal(same raw codes in the config file) record the same codes as sent.
That's a bit peculiar then. If it's a newer version of Raspbian it's possible something has changed that breaks this library but I wouldn't know, I'm on a version from last year.
It's also possible that the way the signal is sent with this library is interfering with the receiver's ability to receive with the correct timing. Do you have another raspberry pi or other device which can receive and print signals? This is something quite hard for me to debug without being there to look at it.
Sorry. I don't have other device to accomplish your test.
Luckily the Midea Air Conditioner can receive the signal sent by ir-slinger correctly...
Oh! So the signal sent from ir-slinger actually works? That's a pretty strong indication that trying to run the sender and the receiver at the same time is causing a conflict on system resources or something to that effect.
ir-slinger uses pigpio which does a lot of low level work to send these signals with microsecond precision. It may be different from how lirc operates so it's possible that pigpio is interrupting lirc receiving tasks to the point where it can't get usable data. That's just a complete guess, I'm not 100% sure what's going on here.
It doesn't seem like conflict. Because in both case(1: irsend
send and mode2
receive, 2: ir-slinger
send and mode2
receive), sender and receiver work at the same time.
Maybe just because the way to send data of pigpio
and lirc
is different.
It's weird that when darkness comes, mode2
record the same codes of ir-slinger
as irsend
. I will do more test such as changing duty cycle.
Closing for now as there isn't yet a clear indication of a bug in ir-slinger.
Code to send raw data:
receive signal like this: