NB-IOT BC28连接阿里云服务器发数据。

2023-10-17 15:59

本文主要是介绍NB-IOT BC28连接阿里云服务器发数据。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

入坑俩月,收获就这么点,今天写写吧就当是笔记了。我的是电信卡。大家买到开发板后,一定要反复仔细读官方手册。

		第一步:BC28硬件板准备

准备一条 USB 转 RS232 的线接到板子上,注意要将板子上的 232_VCC 的跳线帽要跳接 上。这样是为了让 RS232 能够正常工作。注意一定要接,不然 RS232 是不工作的!
NB 卡可以在电信运营商 进行购买或者其他渠道获取。但是一定要注意所在地区是否已经有 NB 网络的覆盖。否则即 便有卡,也没法进行实际调试使用。移动的 NB 用普通的手机卡物联网都是可以的。电信的 必须是专用的。
打开提供的工具软件 QNavigator_NB-IoT_V1.0 来进行测试。下图就是我们已经插入 SIM 卡并且能够正常工作的。这里是我往阿里云发UDP数据
打开QN软件后,设置端口(com3)、Connect to module。这里会出很多问题,如果顺利的话,你的模块信息还有卡状态都会出现,你也可以单独点击下面的Module information和Registration information。当然左边的信息都是可以通过AT指令查询到的,自己到AT指令手册上去找吧

       	 第二步:电信定向 IP 发数据 UDP

对于定向发 IP,就是用户可以任意发数据到公网服务器端,目前电信对于 IP 还是存在一 定的限制。所以这里的定向 IP 如果用户有自己的卡并绑定了对应的公网服务器即可使用。 对于移动联通目前并没有相关的限制,可以任意发到公网 IP。电信对 IP 的限制不光是 UDP 也会对 TCP 端发送进行限制。
我们要连接服务器,需要首先设置 APN。那么这里的 APN 就是需要连接 到华为的地址上来。所以首先第一步先去激活 PDP,让模块具备发数据的基础
大家注意看我的右上角
通过调节成功之后呢,图片上会出现模块注册到服务器所分配的 IP 地址,这个就是和调试 2G 模块是一个道理。所以熟悉 2G 模块, 再来调试 NB-IOT 其实并没那么复杂。

这是阿里云的IP地址
在这里设置阿里云的IP地址和 端口号。 端口号这里需要大家在服务器上打开一个UDP端口,并设置开放状态,具体大家也是去看阿里云的手册=。=这里我已经在阿里云上部署了一个程序,在文章的最后分享给大家,当然这类转发程序网上有很多,这个并不是很好。

当然 UDP 是无连接模式。如果你服务器 不存在或者有问题,他也会显示连接 OK 的,既然无需连接那么建立一个UDP的通话很简单: 1. Create a socket 2.Send a message 反正我不管他连没连上,我就往这个IP地址发消息就是了,剩下的我就不管了,类似于写信。
下面俩指令我没用到
大家注意这里发送的都是十六进制的数据,并且我在测试的时候全部使用指令来发送,左边的Send不知为何不管用,还有一点我的AT+NSOST=1, 第一个<> 里不一定非得是1 0,1,2都可以的。

  第三步:数据在阿里云上显示

在阿里云上部署如下程序。

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<stdlib.h>

#define SERV_PORT 3001

int main()
{
int sock_fd;
int recv_num;
int send_num;
int client_len;
char recv_buf[20];
struct sockaddr_in addr_serv;
struct sockaddr_in addr_client;
sock_fd = socket(AF_INET,SOCK_DGRAM,0);
if(sock_fd < 0){
perror(“socket”);
exit(1);
}else{

printf(“sock successful\n”);
}
memset(&addr_serv,0,sizeof(struct sockaddr_in));
addr_serv.sin_family = AF_INET;
addr_serv.sin_port = htons(SERV_PORT);
addr_serv.sin_addr.s_addr = htonl(INADDR_ANY);
client_len = sizeof(struct sockaddr_in);

if(bind(sock_fd,(struct sockaddr *)&addr_serv,sizeof(struct sockaddr_in))<0 ){
perror(“bind”);
exit(1);
}else{

printf(“bind success\n”);
}
while(1){
printf(“begin recv:\n”);
recv_num = recvfrom(sock_fd,recv_buf,sizeof(recv_buf),0,(struct sockaddr *)&addr_client,&client_len);
if(recv_num < 0){
printf(“bad\n”);
perror(“again recvfrom”);
exit(1);
}else{
recv_buf[recv_num]=’\0’;
printf(“recv success:%s\n”,recv_buf);
}
printf(“begin send:\n”);
send_num = sendto(sock_fd,recv_buf,recv_num,0,(struct sockaddr *)&addr_client,client_len);
if(send_num < 0){
perror(“sendto”);
exit(1);
}else{
printf(“send successful\n”);
}
}
close(sock_fd);
return 0;
}

运行后是这样:在这里插入图片描述
收到数据是这样:
在这里插入图片描述

这篇关于NB-IOT BC28连接阿里云服务器发数据。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/226445

相关文章

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

pandas数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分