Python网络通信(6)— COAP通信

Python网络通信(6)— COAP通信

一、COAP概述

COAP的介绍参考:【IoT】基于NB-IoT的CoAP协议浅析
COAP的开发参考:NB-IoT应用开发笔记
COAP通过UDP调试参考:CoAP协议学习笔记 1.3 用UDP工具来调试CoAP

二、COAP包的安装

1、在Pycharm中安装

直接搜索CoAPthon3,然后点击安装即可
在这里插入图片描述

2、在Ubuntu 下使用PIP3安装

直接使用命令安装即可:

pip3 install CoAPthon3
3、通过源码安装

使用git拉取源码,python3源码地址:https://github.com/Tanganelli/CoAPthon3

git clone https://github.com/Tanganelli/CoAPthon3

然后进入源码包,安装即可:

cd CoAPthon3
python3 setup.py sdist
sudo pip3 install dist/CoAPthon3-1.0.1.tar.gz -r requirements.txt

安装完成其实可以直接使用其中的例程,例如,运行coap服务器:

python3 coapserver.py

因为python3版本的没有使用说明,可以参考Python2版本的:https://github.com/Tanganelli/CoAPthon

三、建立COAP服务器

首先我们需要创建两个类,然后通过创建的类来实例化一个CoAP服务端对象,创建完成后开始监听就好了。

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author: William

from coapthon.server.coap import CoAP
from coapthon.resources.resource import Resource

Host = "0.0.0.0"  		# 本机IP地址
Port = 5683             # 端口号

class BasicResource(Resource):
    def __init__(self, name="BasicResource", coap_server=None):
        super(BasicResource, self).__init__(name, coap_server, visible=True,
                                            observable=True, allow_children=True)
        self.payload = "Basic Resource"

    def render_GET(self, request):
        return self

    def render_PUT(self, request):
        self.payload = request.payload
        return self

    def render_POST(self, request):
        res = BasicResource()
        res.location_query = request.uri_query
        res.payload = request.payload
        return res

    def render_DELETE(self, request):
        return True

class CoAPServer(CoAP):
    def __init__(self, host, port):
        CoAP.__init__(self,(host, port))
        self.add_resource('basic', BasicResource())

def main():
    print("CoAPServer IP addr : %s port : %d "%(Host,Port))
    server = CoAPServer(Host,Port)
    try:
        server.listen(10)
    except KeyboardInterrupt:
        print("Server Shutdown")
        server.close()
        print("Exiting...")

if __name__ == '__main__':
    main()

三、COAP客户端

客户端代码如下所示

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author: William

import time
from coapthon.client.helperclient import HelperClient

host = "192.168.0.100"
port = 5683
path = "basic"

def main():
    client = HelperClient(server=(host, port))
    while True :
        response = client.put(path,"Hello world!")
        print(response.pretty_print())
        time.sleep(5) # 每隔5秒发送一次数据
    client.stop()

if __name__ == '__main__':
    main()

运行脚本,可以在服务端下看到,已经接收到消息:
在这里插入图片描述

四、连接到EMQ

首先,将EMQ的COAP插件打开,打开EMQ的控制台,找到插件中的emqx_coap,将其打开:
在这里插入图片描述
注意,这里有些EMQ的版本不能成功运行coap插件,原因我不清楚,不过经过我的测试,v3.0.1版本可以成功运行。
然后我们将代码修改为如下所示,其中path变量中topic表示主题,c=client1表示客户端id为client1u=tom表示用户名为tomp=secret表示密码为secret,这样设置EMQ就会将其转换为对应的MQTT协议的数据。

import time
from coapthon.client.helperclient import HelperClient

host = "39.96.35.207" # "192.168.0.100"
port = 5683
path = "/mqtt/topic1?c=client1&u=tom&p=secret"

def main():
    client = HelperClient(server=(host, port))
    while True :
        response = client.put(path,"Hello world!")
        print(response.pretty_print())
        time.sleep(5) # 每隔5秒发送一次数据
    client.stop()

if __name__ == '__main__':
    main()

运行代码,在EMQ的控制台,可以看到,已经连接成功了:
在这里插入图片描述
我们打开MQTTfx,订阅topic1主题,可以接收到消息:
在这里插入图片描述
另外,我们也可以通过EMQ里的Websocket工具来查看,打开Websocket,点击连接
在这里插入图片描述
然后订阅topic1,就可以看到,已经接收到消息了。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值