将 CNC 机器连接到 AWS IoT

物联网 MQTT aws-iot
2021-06-17 06:25:44

我想在一个包含机械臂和传感器的系统中将我的 CNC 机器与 AWS IoT 连接起来。CNC 机器连接到笔记本电脑并使用 Python 代码运行。我想使用 MQTT 使 CNC 机器成为发布者和订阅者,但我不知道该怎么做。这是 CNC Python 代码。

import serial
import time

# Open grbl serial port
s = serial.Serial('COM3',9600)

# Open g-code file
f = open('grbl.gcode.txt','r');

# Wake up grbl
s.write("\r\n\r\n")
time.sleep(2)   # Wait for grbl to initialize 
s.flushInput()  # Flush startup text in serial input

# Stream g-code to grbl
for line in f:
    l = line.strip() # Strip all EOL characters for consistency
    print 'Sending: ' + l,
    s.write(l + '\n') # Send g-code block to grbl
    grbl_out = s.readline() # Wait for grbl response with carriage return
    print ' : ' + grbl_out.strip()

# Wait here until grbl is finished to close serial port and file.
raw_input("  Press <Enter> to exit and disable grbl.") 

# Close file and serial port
f.close()
s.close()  
1个回答

到目前为止,最简单的方法是使用诸如paho-mqtt 之类的库或适用于 Python 的 AWS IoT SDK(参见本文底部),它们是 Python 的 MQTT 客户端库。

链接文档中提供了使用指南。这是一个示例,供参考,您可能会发现它对适应您的目的很有用(它大致基于提供的文档):

import paho.mqtt.client as mqtt
import time

# Runs when the client receives a CONNACK connection acknowledgement.
def on_connect(client, userdata, flags, result_code):
    print "Successful connection."
    # Subscribe to your topics here.
    client.subscribe("sensor/topic_you_want_to_subscribe_to")

# Runs when a message is PUBLISHed from the broker. Any messages you receive
# will run this callback.
def on_message(client, userdata, message):
    if message.topic == "sensor/topic_you_want_to_subscribe_to":
        if message.payload == "START":
            # We've received a message "START" from the sensor.
            # You could do something here if you wanted to.
        elif message.payload == "STOP":
            # Received "STOP". Do the corresponding thing here.

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect("yourbrokerurl.com", 1883, 60)
client.loop_start()

while True:
    # Your script must loop here, and CAN block the thread.
    # For example, you could take a measurement, then sleep 5 seconds
    # and publish it.
    data_to_broadcast = get_data()
    client.publish("cnc/data", data_to_broadcast)
    time.sleep(5)

这个例子看起来有点令人难以抗拒……但是当你把它分成几部分时它很容易。从查看行开始client = mqtt.Client()这里我们创建了一个 MQTT 客户端。然后我们注册用于连接和接收消息的回调(这些只是在事件发生时运行的函数)。

在我们的连接回调中,我们订阅了传感器主题。然后,在消息接收函数中,我们检查消息是否告诉我们的 CNC 做某事,然后去做(执行留给读者)。

然后,在while True:循环中,我们每 5 秒发布一次数据。这只是一个例子——你可以在那里做任何你想做的事。请记住client.publish是发布某些内容所需的功能。


或者,如果您正在寻找专门用于 AWS IoT的库,您可以使用aws-iot-device-sdk-python这建立在 Paho 的基础上,但可以更轻松地从库中访问额外的要求和功能(例如设备影子)。

还请记住,AWS IoT 要求每个设备都有一个设备证书——他们的 SDK 将帮助您处理这个问题,但 Paho 本身不会。

是 Amazon 开发工具包的基本发布/订阅示例。您会注意到它与上面的示例大致相似,并且可能会更快开始。