树莓派物联网应用基础(4):Python物联网MQTT聊天室 2020-04-05

树莓派物联网应用基础(4):Python物联网MQTT聊天室

这实验是用一台Windows计算机和一台树莓派分别运行Python聊天室程序,在树莓派运行的程序加上有信息通讯小灯闪一下代码。程序使用的是古德微机器人的MQTT服务器"www.gdwrobot.top", 1883。

演示视频



MQTT物联网应用PythonMQTT聊天室.mp4

一、以下是Windows系统计算机运行的代码:

#Python物联网:聊天室  windows

#!/usr/bin/env python

# coding: utf-8

#!/usr/bin/python

import paho.mqtt.client as mqtt

import time

import threading        #导入多线程库


def talk1():                 #输入聊天内容自定义函数

        while True:

                time.sleep(0.1)

                txt=input('>>>>')

                client.publish('ospchatroom',txt)            #向MQTT发布主题,消息


def on_connect(client, userdata, flags, rc):            

       print("Connected with result code "+str(rc))

       client.subscribe("ospchatroom")          ##订阅主题,主题名


def on_message(client, userdata, msg):                         #函数,获得主题返回消息

        #txt=str(msg.payload,encoding=='utf8')                #下面两行代码写法测试时没有返回信息

        #print(txt)

        print(msg.topic + ":" + str(msg.payload, encoding="utf8"))        #用这行代码写法可以解决以上两条代码的问题

        time.sleep(0.1)

        #return msg.payload            #这行代码不用不影响功能


client = mqtt.Client()

client.on_connect = on_connect

client.on_message = on_message

client.connect("www.gdwrobot.top", 1883, 60)        # 60是keep alive的时间间隔

threading1=threading.Thread(target=talk1)                #talk1模块加到多线程中

threading1.start()

client.loop_forever()            # 保持连接


二、以下是树莓派运行的代码(加了代码:当接收到信息小灯闪一下):

#!/usr/bin/env python

# coding: utf-8

#!/usr/bin/python

import paho.mqtt.client as mqtt

import time

import RPi.GPIO as GPIO    #导入树莓派BCM模块

import threading

GPIO.setmode(GPIO.BCM)    #设置GPIO引脚为BCM编码模式

GPIO.setup(5,GPIO.OUT)    #设置该端口为输出模式

def talk1():

    while True:

        time.sleep(0.1)

        txt=input('>>>>')

        client.publish( 'ospchatroom' , txt  )             

def on_connect(client, userdata, flags, rc):            #连接MQTT函数

    print("Connected with result code "+str(rc))

    client.subscribe("ospchatroom")           #订阅主题,同一主题名


def on_message(client, userdata, msg):       

    print(msg.topic + ":" + str(msg.payload, encoding="utf8"))

    GPIO.output(5,GPIO.HIGH)

    time.sleep(0.1)

    GPIO.output(5,GPIO.LOW)

    #return msg.payload            #这行代码不用不影响功能


client = mqtt.Client()

client.on_connect = on_connect

client.on_message = on_message

client.connect("www.gdwrobot.top", 1883, 60)

threading1=threading.Thread(target=talk1)

threading1.start()

client.loop_forever()


参考:paho-mqtt·项目简介

https://pypi.org/project/paho-mqtt/

你可能感兴趣的:(树莓派物联网应用基础(4):Python物联网MQTT聊天室 2020-04-05)