物联网通讯协议MQTT、NB-IOT、Zigbee、CoAP、RFID、BLUETOOTH、NFC、4G和HTTP

物联网(IoT)的快速发展带来了对多样化通信协议的需求。以下是一些常用的物联网通信协议,以及它们的基本原理和代码示例。

1. MQTT

MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息传输协议,非常适合带宽有限和不可靠的网络环境。

特点

  • 低带宽,低延迟,高可靠性。
  • 支持QoS(服务质量)。

代码示例(Python):

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print(f"Connected with result code {rc}")
    client.subscribe("test/topic")

def on_message(client, userdata, msg):
    print(f"{msg.topic} {msg.payload}")

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("mqtt.eclipse.org", 1883, 60)
client.loop_forever()

2. NB-IoT

NB-IoT(Narrowband Internet of Things)是一种为物联网设计的窄带射频通信技术,支持室内覆盖和高连接密度。

特点

  • 低功耗,广覆盖,大连接数。
  • 适合静态或移动缓慢的设备。

代码示例(AT指令):

AT+QREGSWT=2    // Disable registration function of Huawei’s IoT platform
OK
AT+CGPADDR      // Query the IP address of the module
+CGPADDR:0,10.3.42.109
OK
AT+NSOCR=DGRAM,17,0,1 // Create UDP socket
1
OK
AT+NSOST=1,220.180.239.212,20000,5,48656c6c6f,100 // Send UDP data
1,5
OK
+NSOSTR:1,100,1     // RF signal sent successfully

3. Zigbee

Zigbee是一种短距离、低功耗的无线通信协议,适用于家庭自动化和工业控制等领域。

特点

  • 低功耗,低成本。
  • 支持星型、树型和网状拓扑。

代码示例(Z-Stack):

void Zigbee_Init() {
    // Initialize Zigbee stack
    ZComStartup();
    // Register simple descriptor
    SimpleDescriptorFormat_t simpleDesc = {
        1, // Endpoint
        ZCL_PROFILE_ID,
        ZCL_CLUSTER_ID_GEN_BASIC,
        // ... other fields
    };
    AFRegister(&simpleDesc);
    // Start the network layer
    NLME_NETWORKFORMATION();
}

4. CoAP

CoAP(Constrained Application Protocol)是一种专为物联网设计的网络应用协议,基于UDP。

特点

  • 轻量级,适合资源受限设备。
  • 支持请求/响应模式。

代码示例(Java):

import org.eclipse.californium.core.CoapClient;
import org.eclipse.californium.core.CoapResponse;

public class CoAPExample {
    public static void main(String[] args) {
        CoapClient client = new CoapClient("coap://example.com/resource");
        CoapResponse response = client.get();
        System.out.println("Response: " + response.getResponseText());
    }
}

5. RFID

RFID(Radio-Frequency Identification)是一种利用射频信号进行通信的自动识别技术。

特点

  • 非接触式,自动识别。
  • 适合物流跟踪和库存管理。

代码示例(C#):

SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
port.Open();

void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;
    string indata = sp.ReadExisting();
    // Process RFID data
}

6. Bluetooth

Bluetooth是一种短距离无线通信技术,常用于设备间的无线连接。

特点

  • 短距离,低功耗。
  • 支持多种设备间的通信。

代码示例(BTStack):

// Initialize BTStack
btstack_init();
// Register packet handler
hci_dump_init(HCI_DUMP_STDOUT);
// Open UART connection to Bluetooth module
btstack_uart_block_posix_open("/dev/ttyUSB0", 115200, 1);

7. NFC

NFC(Near Field Communication)是一种短距离高频无线通信技术,用于移动支付和数据传输。

特点

  • 非接触式,简单易用。
  • 适合移动支付和快速配对。

代码示例(Android):

NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
Intent intent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
nfcAdapter.enableForegroundDispatch(this, intent, null, null);

8. 4G

4G是第四代移动通信技术,提供高速的数据传输服务。

特点

  • 高速度,大带宽。
  • 适合移动设备和高速数据服务。

代码示例(STM32):

void USART1_IRQHandler(void) {
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {
        uint8_t data = USART_ReceiveData(USART1);
        // Process received data
    }
}

9. HTTP

HTTP(HyperText Transfer Protocol)是互联网上应用最广泛的协议之一,用于传输超文本数据。

特点

  • 无状态,灵活。
  • 支持多种类型的数据传输。

代码示例(C++):

#include <iostream>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

int main() {
    try {
        boost::asio::io_context io_context;
        tcp::resolver resolver(io_context);
        tcp::socket socket(io_context);
        boost::asio::connect(socket, resolver.resolve("example.com", "http"));
        // Send HTTP request...
    } catch (std::exception& e) {
        std::cerr << e.what() << std::endl;
    }
    return 0;
}

这些协议各有特点,适用于不同的应用场景。开发者可以根据具体需求选择合适的通信协议。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/884779.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

spring cloud Gateway网关

网关是将所有面向用户的服务接口统一管理的代理服务器&#xff0c;所有内部服务的远程调用都是在局域网内部&#xff0c;而网关是在公网中。 一、依赖 通过访问网关调用项目中的服务&#xff0c;需要使用Eureka&#xff0c;网关服务器需要在Eureka服务注册它自己&#xff0c;本…

Clipboard.js实现复制文本到剪贴板功能

一、Clipboard.js简介 Clipboard.js是一个轻量级的实现复制文本到剪贴板功能的JavaScript插件&#xff0c;该插件可以将输入框&#xff0c;文本域&#xff0c;DOM节点元素中的文本内容复制到剪贴板中。 官网地址&#xff1a;Clipboard.js 浏览器兼容性&#xff1a;兼容Chrome、…

Ubuntu环境切换到服务器某个用户后source等命令和Tab快捷补全都用不了了,提示没找到,但root用户可以

以escs用户为例&#xff1a; 输入以下命令 grep root /etc/passwd grep escs /etc/passwd 对比发现&#xff0c;root用户配的是bash&#xff0c;而escs却是sh&#xff0c; 所以把escs的sh改成和root一样的bash&#xff0c;命令为 usermod -s /bin/bash escs 改好后就可以了。 …

VSCODE驯服日记(三):配置C++环境

1. 下载mingw64&#xff0c;解压后把bin并添加到环境变量 1>编译器介绍 mingw&#xff1a;专为windowsgcc&#xff1a;多平台msvc &#xff1a;windows&#xff0c;且配合vs使用更佳 注意与调试器gdb和lldb的区别 2. 安装vscode插件&#xff1a; 安装C/C插件 安装code ru…

测试管理新增视图与高级搜索功能,测试计划支持一键生成缺陷详情,MeterSphere开源持续测试工具v3.3版本发布

2024年9月29日&#xff0c;MeterSphere开源持续测试工具正式发布v3.3版本。 在这一版本中&#xff0c;接口测试方面&#xff0c;接口导入功能支持导入Postman、JMX、HAR和MeterSphere格式的文件&#xff0c;接口场景的自定义请求步骤支持cURL快捷导入&#xff1b;测试管理方面…

基于趋近律的滑模控制器设计、仿真(S-function)

目录 一、什么是滑模控制?1. 滑模面2. 控制策略3. 抗干扰和鲁棒性4. 滑模控制的应用 二、什么是趋近律&#xff1f;1. 趋近律三大设计目标2. 常见的趋近律形式1. 等速趋近律2. 指数趋近律3. 幂次趋近律 三、滑模控制器设计四、滑模仿真示例1. Simulink仿真框图2. 不同k值下的仿…

MAC如何获取文件数字签名和进程名称

1、安装需要查看数字签名和进程名称的软件包 2、打开终端命令行&#xff08;Terminal&#xff09; 3、查找数字签名 在终端命令行中输入&#xff1a; codesign -dvv 安装的软件路径 2>&1 | grep "Authority" | head -n 1 | cut -d -f2”回显即为进程的数…

kafka发送消费核心参数与设计原理详解

核心参数详解: 发送端参数: 发送方式:默认值一般都是1: 重试参数 : 批量参数: 消费端参数: 自动提交参数: 如果是false,就是说消费完后不提交位移。也就是说比如之前消费的1-5.第N次还是消费到1-5.如果是false。那么第一次消费1-3,第二次消费4-5:默认是true:我们…

HCIP和HCIE有什么区别呢?

HCIP和HCIE有什么区别呢&#xff1f;今天给大家介绍下两者的不同 ‌认证层次‌&#xff1a;HCIE屹立于华为认证体系的顶端&#xff0c;定位为专家级认证&#xff1b;而HCIP则位于中坚位置&#xff0c;属于中级认证。 难度与专业要求‌&#xff1a;通往HCIE之路布满挑战&…

机器学习实战26-一种基于LightGBM的股市涨跌预测系统与代码实现过程

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下机器学习实战26-一种基于LightGBM的股市涨跌预测系统与代码实现过程。文章首先阐述了项目背景&#xff0c;随后详细解释了LightGBM模型的原理及其在股市预测中的应用。通过选取具有代表性的样例股票数据集&#xff…

深入浅出MongoDB(三)

深入浅出MongoDB&#xff08;三&#xff09; 文章目录 深入浅出MongoDB&#xff08;三&#xff09;复制副本集设置分片分片实例备份与恢复监控ObjectId 复制 复制时将数据同步在多个服务器的过程&#xff0c;提供了数据的冗余备份&#xff0c;在多个服务器上存储数据副本&#…

视频压缩怎么压缩更小?分享释放视频占用空间的小技巧

想问问同样在做视频自媒体博主的你&#xff0c;都是怎么解决占满内存的视频素材的&#xff1f; 是有听说有一部分博主会把录制好的&#xff0c;还未使用的视频素材&#xff0c;用工具压缩他们的体积&#xff0c;以减少占用内存空间。 小编也有试过&#xff0c;发现视频的体积是…

oracle解决关联查询报invalid number问题

出现问题的原因和背景 oracle进行关联查询的时候因为字段存在多个用逗号切割的id&#xff0c;导致查询的过程中报无效数字或非法数字 问题复现 新建表A CREATE TABLE "A" (id NUMBER NOT NULL,name VARCHAR2(255 BYTE) )INSERT INTO "A" VALUES (1, 上海…

【Spring】lombok、dbUtil插件应用

一、lombok插件 1. 功能&#xff1a;对实体类自动&#xff0c;动态生成get、set方法&#xff0c;无参、有参构造..... 2. 步骤&#xff1a; &#xff08;1&#xff09;idea安装插件(只做一次) &#xff08;2&#xff09;添加坐标 &#xff08;3&#xff09;编写注解 NoArgsCo…

Codeforces Round 975 (Div. 2) A-C 题解

这次看到 C 题分数 1750 就开始害怕了&#xff0c;用小号打的比赛&#xff0c;一直觉得做不出来&#xff0c;最后才想到 A. Max Plus Size 题意 给你一些整数&#xff0c;选择一些涂成红色&#xff0c;两两不能相邻&#xff0c;你的得分为&#xff1a; [ 红色元素的个数 ] …

Tableau数据可视化入门

目录 一、实验名称 二、实验目的 三、实验原理 四、实验环境 五、实验步骤 1、Tableau界面引导 2、数据来源 3、数据预处理操作 4、制作中国各个地区的利润图表 4.1条形图 4.2气泡图 5、制作填充地球图 一、实验名称&#xff1a; 实验一&#xff1a;Tableau数据可视…

PyCharm 的安装和配置

环境要求&#xff1a; OS&#xff1a;Windows / macOS / Linux (此处使用 Windows 10 进行演示)Python&#xff1a;包括但不限于 Anaconda&#xff0c;miniconda&#xff0c;Python。在 Windows 下只要能找到 python.exe 即可 Download 进入 PyCharm 官网&#xff0c;选择对…

gitlab修改访问端口

目录 1.找到gitlab.rb文件&#xff0c;一般在/etc/gitlab/路径下 2.打开配置文件&#xff0c;加上代码 3.重新配置 4.重启gitlab 1.找到gitlab.rb文件&#xff0c;一般在/etc/gitlab/路径下 2.打开配置文件&#xff0c;加上代码 打开文件 sudo vi gitlab.rb 加上默认端口配…

上交所服务器崩溃:金融交易背后的技术隐患暴露杭州BGP高防服务器43.228.71.X

一、上交所宕机事件始末 2024 年 9 月 27 日&#xff0c;上交所交易系统突发崩溃&#xff0c;这一事件犹如一颗巨石投入平静的湖面&#xff0c;引起了轩然大波。当天上午&#xff0c;众多投资者反馈券商交易出现延迟问题&#xff0c;随后上交所发布了《关于股票竞价交易出现异常…

OJ在线评测系统 前端创建题目(增) 更新题目(改) 题目列表(查) 以及做题页面的开发 基于VUECLI脚手架画界面

目录 前端创建页面的开发一 创建一个路由 用acro design写 前端创建页面的开发二 题目管理页面 搜索 最終效果 题目更新页面的开发 携带参数的那种 修改路由 页码更新细节 我们先处理菜单项的权限控制和权限隐藏 在这里改 属性绑定一个函数 可以参考聚合搜索项目…