Итак, я пытаюсь изменить сигнал ШИМ на основе полезной нагрузки сообщений, отправленных брокером MQTT. Мой клиентский код выглядит так:
import paho.mqtt.client as mqtt #import the client1
import RPi.GPIO as g
############
g.setmode(g.BCM)
g.setup(24, g.OUT)
p= g.PWM(24, 1)
p.start(10)
#Recibimos esta confirmacion cuando recibimos respuesta de conexion con el servidor
freq=1
duty=10
def on_connect(client, userdata, flags, rc): ##Creamos la funcion 'on_connect'
print("Connected with result code " +str(rc))
#Una vez conectados, nos suscribimos a los topicos
client.subscribe("CoreElectronics/test") #suscripcion a test
#Cada uno de estos topics debe mandarnos un mensaje, en este caso
#'test' nos devuelve 'Hello'
#'topic' nos devuelve 'World!'
##Recibimos esta confirmacion cuando nos llega un mensaje del servidor
def on_message(client, userdata, msg): #Creamos la funcion 'on_message'
msg.payload=msg.payload.decode("utf-8")
print(msg.topic+ " " +str(msg.payload))
if msg.payload == "f": #Respuesta del primer topic
freq= freq+2
p.ChangeFrequency(freq)
print("Recieved Frequency increment, LED frequency is now: ", freq)
if msg.payload == "d": #Respuesta del segundo topic
if freq==1:
freq=freq
print('The frequency is minimal!')
else:
freq= freq-2
print("Recieved Frequency decrement, LED frequency is now: ", freq)
p.ChangeFrequency(freq)
if msg.payload == "l": #Respuesta del segundo topic
if duty==100:
duty=duty
print('The Duty Cycle is maximum!')
else:
duty= duty+10
p.ChangeDutyCycle(duty)
print("Recieved Duty Cycle increment, LED duty is now: ", duty)
if msg.payload == "k": #Respuesta del segundo topic
if duty==1:
duty=duty
duty()
print('The Duty Cycle is minimal!')
else:
duty=duty-10
duty()
p.ChangeDutyCycle(duty)
print("Recieved Duty Cycle decrement, LED duty is now: ", duty)
#Creamos un cliente MQTT y le adjuntamos rutinas
client = mqtt.Client() #Aqui creamos un cliente de mqtt, llamado 'client'
freq=freq
duty=duty
client.on_connect = on_connect
client.on_message = on_message
client.connect("mqtt.eclipse.org", 1883,60) # Nos conectamos a esta direccion
client.loop_forever() #El cliente se ejecutara indefinidamente
А мой издатель выглядит так:
import paho.mqtt.publish as publish
while 1: publish.single("CoreElectronics/test", input(), hostname= "mqtt.eclipse.org")
Суть этих программ в том, чтобы я отправлял символьные входы от Брокера к Клиенту чтобы изменить значения 'freq' и 'duty' для управления ШИМ, который питает светодиод. К сожалению, безрезультатно. Клиентская программа печатает только:
CoreElectronics/test f #this last character changing depending on the broker input. Be it: f, d, l or k