admin管理员组

文章数量:1541718

文章目录

  • 前言
  • 一、Air724UG是什么?
  • 二、AT是什么?
  • 三、服务器是什么?
  • 四、我们要做什么?
  • 五、我们该怎么做?
    • 0.准备工作
    • 1·连接模块
    • 2.检查固件
    • 3.联网测试
    • 4.服务器配置·建立TCP服务器
    • 5.与服务器通讯测试(一)
    • 6.服务器配置·建立通讯数据存储池
    • 7.与服务器通讯测试(二)
    • 8.单片机配置·通讯板控制程序
    • 9.单片机与通讯板连接
    • 10.单片机配置·数据采集程序
    • 11.服务器配置·数据池处理
    • 11.服务器配置·数据展示
  • 总结


前言

物联网技术日渐热门,万物互联的时代已经到来,我们有必要学习并使用物联网的开发模组,来适应科学技术日新月异的今天,也为日后的工作提供便利


提示:以下是本篇文章正文内容,下面案例可供参考

一、Air724UG是什么?

Air724UG是支持4G通讯的LGA封装芯片,可进行4G LTE通讯。相当于路由器中的芯片,我们把它焊接到pcb上,提供电源和SIM卡,就可以通过指令与网络通讯。

二、AT是什么?

AT指令是应用于终端设备与PC应用之间的连接与通信的指令。AT 即Attention。每个AT命令行中只能包含一条AT指令;对于AT指令的发送,除AT两个字符外,最多可以接收1056个字符的长度(包括最后的空字符)。
每个AT命令行中只能包含一条AT指令;对于由终端设备主动向PC端报告的URC指示或者response响应,也要求一行最多有一个,不允许上报的一行中有多条指示或者响应。AT指令以回车作为结尾,响应或上报以回车换行为结尾。 AT指令在通讯中的作用与意类似Windowns中的DOS,Windows基于DOS建立UI实现可视化操作,我们只看到Windows中的操作,却看不到每一个动作之后隐藏的无数条指令。
AT是用于通讯的指令,常用于通讯模块与控制端之间的通讯,例如多年前的无线网卡。随着通讯技术的发展与通讯协议的迭代,AT在PC与手机上的应用日渐减少。目前的 AT 指令着重应用在4G模块、WiFi 模块、BLE 模块中,目的是为了简化嵌入式设备联网的复杂度。 本模块AT指令参照:https://www.openluat/Product/file/asr1802/Luat%204G%E6%A8%A1%E5%9D%97AT%E5%91%BD%E4%BB%A4%E6%89%8B%E5%86%8CV4.1.6.pdf 进行编写

三、服务器是什么?

服务器的具体定义过于晦涩,在本教程中,服务器是指能供远程访问与控制,数据操作与处理的计算机。一般拥有固定的公网IP地址,现多使用云服务器代替自建服务器,例如“阿里云,腾讯云,华为云”等,本教程中使用的是华为云搭建的服务器=来进行演示

四、我们要做什么?

  • 要让Air724UG能通过人工操作建立与服务器的通信
  • 要让服务器能收集存储AIr724UG发送的信息
  • 要让Air724UG能在程序引导下,自动向服务器发送数据
  • 要让Air724UG能在集成了信息收集系统的开发板的引导下,自动向服务器发送收集到的数据**

五、我们该怎么做?

0.准备工作

1、Air724UG开发板+MicroUSB线、SIM卡(老式安卓线)


2、51单片机(51为例,也可以用STM32或其他开发板)

3、QCOM串口通讯助手

下载地址:https://yzui.xyz/yiban/QCOM_V1.6.exe
用于与开发板进行AT通讯

4、Keil C51单片机编程软件

用于编写单片机程序

5、Pycharm(服务器用)

Python编译器(本TCP端口使用Python写成,Java与C#都能实现TCP监听,请大家自行尝试)

6、MobaXterm(服务器用)

连接服务器使用

7、云服务器(服务器用)

以华为云为例,用于建立TCP通讯及收集数据

1·连接模块

1、下载并安装驱动
合宙官方资源也地址:https://www.openluat/Product/4g/S724.html
驱动地址:https://www.openluat/Product/file/uis8910dm/sw_file_20200303181718_8910_module_usb_driver_signed%20_20200303_hezhou.7z
LuaTools地址:http://www.openluat/Product/file/luatoolsV2-redirect.html

下载后得到7z压缩包

找到并解压该文件

根据不同的系统版本,安装不同的驱动程序

进入文件夹后根据电脑CPU位数选择安装程序(新电脑一般为64位)
右击选择“以管理员身份运行”


一直点击下一页直到出现下图
点击完成

至此驱动安装成功

2、下载Luatools工具
LuaTools地址:http://www.openluat/Product/file/luatoolsV2-redirect.html
下载时如弹出下图窗口,点击右侧三点后点击保留

Luatools是单文件软件,但运行会产生Log,建议将其从下载文件夹复制到单独的文件夹中使用


如出现提示,点击红圈。如遇更新,则根据个人喜好更新,更新会产生其他的文件夹,建议在单独目录下操作。

成功打开之后的LuaTools

至此LuaTools安装成功
3、连接4G模块
不插卡的Air724UG(不插卡是为了防止由于使用的模块本来就有故障,而导致机卡绑定的SIM卡失效)用线连接好,与电脑的USB口连接,检查第二列红色LED灯是否常亮,其他LED是否熄灭(如有灯闪烁或常量请检查接线与SIM卡,如无问题请排查硬件问题)

检查无误后,打开LuaTools,主要这三项内容

  • COM口的下拉菜单中是否有3项内容(AT,AP,Modem)如是请进行下一项
  • 勾选4G模块(USB打印)前的对勾,并点击重启模块,看是否有信息输出
  • 如不是,则右击“开始”(左下方四个小方块的图标)选择设备管理器

  • 打开设备管理器,如有COM口,且为包括AP,AT,Modem,则重启电脑或重装LuaTools。如仍不能解决问题,多是硬件故障,及时更换开发板。

    如有输出,则正常(如下图所示)

    输出正常后,进入下一步

2.检查固件

注意查看固件版本的结尾字符是否为“AT”,如是,请进行第三步,如不是,请按下边的步骤操作

固件相关——4G Cat.1)—— XXXX切换为AT版本

点击后出现下图,点击“下载”(如无问题,固件下载过程是全自动的,如出现问题,建议考虑硬件故障)


完成后重复步骤一、二,无误后进入步骤三

3.联网测试

1、QCOM串口调试助手
地址:https://yzui.xyz/yiban/QCOM_V1.6.exe(其他途径下载的也行)


与LuaTools一样,都是单文件程序,建议放到独立文件夹中。界面如下


左上是连接端口的区域,在配置正确的情况下,能全自动识别,直接点击Open Port即可完成与模块的连接


左下是命令发送区,在框中输入指令后,调节上方设置,发送指令给模块

右侧是指令队列设置,上边的框是指令,下边是指令序列的相关设置


当一切就绪后,右击“开始”(左下方四个小方块的图标)选择设备管理器

确定COM口后回到QCOM
在左上的COM选择框口中选择AT所对应的COM口,第二个框波特率设置为115200,其他设置不动


点击OpenPort,观察左下的信息框中的状态,成功则提示Success


此时已与模块建立了AT的通讯,在左下的框中,如上图示输入“AT”(不带引号),勾选上方的Send with Enter“(发送并执行)后,单击输入框右侧的Send Command,结果如下图示。返回”OK“

如能返回”OK“则证明已与模块建立了正确的AT通讯,可进入下一步。
如返回值不是OK,或不返回,重新连接并重新测试,一般是端口错误。
2、SIM卡联网测试
将SIM卡放进模组中,在指令发送框中依次发送以下命令
也可以通过导入ini文件的方法一次性执行这些指令
单击右下的Load Test Script选择ini文件打开即可
本测试ini下载地址:https://yzui.xyz/yiban/NETTEST.ini
下载后在Load Test Script中选择并打开即可载入该测试

测试需调整右下参数

Run Times是运行次数,一般为1
下边的是每次循环的时间间隔
当连接好模块后,点击Run就可以自动运行了
运行结果如下,右侧框内全是OK则证明已连接上移动网络,如有错误建议重新运行QCOM,或断开连接线后一段时间再试。反复测试有问题的,优先考虑SIM卡问题。

AT
指令:AT
功能:测试AT指令功能是否正常``

AT

OK

AT+CPIN?
指令:AT+CPIN?
功能:查询SIM卡是否正常,返回ready则表示SIM卡正常
示例,如果SIM卡插入成功,则返回结果为:

AT+CPIN?

+CPIN: READY

OK

如果未插入SIM卡,则返回结果为:

AT+CPIN?

+CME ERROR: 10

AT+CSQ
指令:AT+CSQ
功能:查询模组的信号强度,第一个值为0-31则正常,99为不正常,第二个参数是信道误码率 bit error rate, 只有通话建立后, 才能获知该值。

示例:

AT+CSQ

+CSQ: 19,99

OK

AT+CREG?
指令:AT+CREG?
功能:查询模组是否注册上GSM网络,+CREG:0,1 表示已注册上本地网,+CREG:0,5表示注册上漫游网。

示例:

AT+CREG?

+CREG: 0,1

OK

AT+CGATT?
指令:AT+CGATT?

功能:返回:+CGATT:1,表示网络已激活;若返回:+CGATT:0,则表示网络未激活,请尝试重启模组激活网络。

示例:

AT+CGATT?

+CGATT:1

OK

AT+CEREG=1
指令:AT+CEREG=1

功能:该命令用于查询终端EPS网络注册状态。当使能提示时,终端的网络注册状态信息有变化,会主动上报给用户终端。通过不同的设置可以上报EPS注册状态、位置区码、小区ID、服务小区的接入技术等信息,通常情况下只需要设置为自动上报EPS注册状态。

示例:

AT+CEREG=1

OK

AT+CIPMUX=0
指令:AT+CIPMUX=0
功能:设置为单路连接

示例:

AT+CIPMUX=0

OK

AT+CIPMODE=0
指令:AT+CIPMUX=0
功能:设置为非透传模式

示例:

AT+CIPMUX=0

OK

AT+CIPMODE=1
指令:AT+CIPHEAD=1

功能:设置接收到消息时显示IP头,格式为:"+IPD,data length:"

示例:

AT+CIPHEAD=1

OK

4.服务器配置·建立TCP服务器

首先要拥有一台能通过公网IP远程连接的服务器
可选择云服务器作为平台(学生可通过阿里云考试及认证后,免费领取一台云服务器,但续约需要做题,且如不续约则不能再领取。其他平台有云服务器学生机的优惠,比较便宜,可以考虑)
这里以华为云的鲲鹏学生机服务器为例,演示TCP服务器的配置过程
另外注意,华为云的鲲鹏系列处理器是ARM架构处理器,并不完全支持X86指令集,因此,部分Linux上的操作可能会报错,拿来准备做开发平台的需要格外注意。(特别注意,华为自家OpenHarmony的运行环境无法搭建在该架构服务器上!!!)
华为云:https://www.huaweicloud/?locale=zh-cn
1、购买并初始化服务器
自行购买服务器,初始化时注意一点更要安装CentOS7.X或Ubuntu18的系统,便于后续安装宝塔面板(华为云部分服务器没有CentOS,其他平台有CentOS的,首选CentOS)
2、初始化后,在华为云主页右上角的“控制台——弹性云服务器ECS”中可以找到已购买并完成配置的云服务器

进入并选择远程登陆


选择CloudShell登录

输入预留并配置好的账号密码,点击连接进入

进入后的界面,到此时,已与云服务器完成连接
3、安装宝塔面板和进行一些服务器相关配置
宝塔的安装与配置请参照:https://www.bt/bbs/thread-19376-1-1.html
本文不再赘述
安装完宝塔后,进入宝塔主控页面
主控页面地址一般是:(服务器公网IP地址) X.X.X.X:8888 的格式
服务器公网IP可在控制台的服务器详情页查询到
下图是宝塔的主控页面(因时间问题,没有将服务器重装,故现在显示的是配置完成后的图,具体配置过程,参考上述教程)

在宝塔的配置过程中,基本上都已安装了各种常用应用,但部分应用仍需用户手动添加
以本教程所用的Python监听接口的执行应用“Python项目管理器”为例
安装流程如下
点开左侧的“软件商店”

在上方搜索框中输入"Python"
安装第一个Python项目管理器(本图是已安装好的,未安装的会有安装选项)
等待其安装完成后,打开“首页显示”

完成后回到首页,在首页左下方打开Python项目管理器(未配置项目的打开不会有内容)

点击左侧的“版本管理”下拉Python版本,选择安装3.6.4版本,点击右侧的安装版本(初次配置为绿色的安装版本,现在显示的是已经安装好的)
注意!!!该应用安装Python版本时间极长,但万不可轻易取消,可以等他安装的同时,再打开一个首页,进行下面的配置
4、端口监听的实现
在Pychram中新建项目,将下面的内容复制进去,并保存为.py文件,如没有Pychram,新建TXT文本文档复制以下内容保存后,将后缀名改为.py也可行)文件名最好用英文或数字

import socket
import threading

class WSGIServer(object):
    def __init__(self, port):
        """初始化对象"""
        # 创建套接字
        self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 解决程序端口占用问题
        self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        # 绑定本地ip地址
        self.tcp_server_socket.bind(("", port))
        # 将套接字变为监听套接字,最大连接数量为100
        self.tcp_server_socket.listen(100)

    def run_forever(self):
        """设备连接"""
        while True:
            # 1.等待设备连接(通过ip地址和端口建立tcp连接)
            #   如果有设备连接,则会生成用于设备和服务器通讯的套接字:new_socket
            #   会获取到设备的ip地址和端口
            new_socket, client_addr = self.tcp_server_socket.accept()
            print("设备{0}已连接".format(client_addr))

            # 2.创建线程处理设备的需求
            t1 = threading.Thread(target=self.service_machine, args=(new_socket, client_addr))
            t1.start()

    def service_machine(self, new_socket, client_addr):
        """业务处理"""
        while True:
            # 3.接收设备发送的数据,单次最大1024字节,按‘gbk’格式解码
            receive_data = new_socket.recv(1024).decode("gbk")
            # 4.如果设备发送的数据不为空
            if receive_data:
                # 4.1 打印接收的数据,这里可以将设备发送的数据写入到文件中
                # 获取设备的ID信息
                print(receive_data)
                if receive_data[0:6] == "report":
                    response = "SET OK:" + receive_data
                else:
                    receive_data = receive_data[6:].split(",")[0]
                    # 拼接响应数据
                    response = "alarm=" + receive_data + ",Switch:clear"
                print(response)
                # 4.2 返回原数据作为应答,按‘utf-8’格式编码
                new_socket.send(response.encode("utf-8"))
            # 5.当设备断开连接时,会收到空的字节数据,判断设备已断开连接
            else:
                print('设备{0}断开连接...'.format(client_addr))
                break

        # 关闭套接字
        new_socket.close()


def main(port):
    """创建一个WEB服务器"""
    wsgi_server = WSGIServer(port)
    print("服务器已开启")
    wsgi_server.run_forever()



if __name__ == '__main__':
    port = 1902     # 指定端口
    main(1902)
    import socket
import threading

class WSGIServer(object):
    def __init__(self, port):
        """初始化对象"""
        # 创建套接字
        self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 解决程序端口占用问题
        self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        # 绑定本地ip地址
        self.tcp_server_socket.bind(("", port))
        # 将套接字变为监听套接字,最大连接数量为100
        self.tcp_server_socket.listen(100)

    def run_forever(self):
        """设备连接"""
        while True:
            # 1.等待设备连接(通过ip地址和端口建立tcp连接)
            #   如果有设备连接,则会生成用于设备和服务器通讯的套接字:new_socket
            #   会获取到设备的ip地址和端口
            new_socket, client_addr = self.tcp_server_socket.accept()
            print("设备{0}已连接".format(client_addr))

            # 2.创建线程处理设备的需求
            t1 = threading.Thread(target=self.service_machine, args=(new_socket, client_addr))
            t1.start()

    def service_machine(self, new_socket, client_addr):
        """业务处理"""
        while True:
            # 3.接收设备发送的数据,单次最大1024字节,按‘gbk’格式解码
            receive_data = new_socket.recv(1024).decode("gbk")
            # 4.如果设备发送的数据不为空
            if receive_data:
                # 4.1 打印接收的数据,这里可以将设备发送的数据写入到文件中
                # 获取设备的ID信息
                print(receive_data)
                if receive_data[0:6] == "report":
                    response = "SET OK:" + receive_data
                else:
                    receive_data = receive_data[6:].split(",")[0]
                    # 拼接响应数据
                    response = "alarm=" + receive_data + ",Switch:clear"
                print(response)
                # 4.2 返回原数据作为应答,按‘utf-8’格式编码
                new_socket.send(response.encode("utf-8"))
            # 5.当设备断开连接时,会收到空的字节数据,判断设备已断开连接
            else:
                print('设备{0}断开连接...'.format(client_addr))
                break

        # 关闭套接字
        new_socket.close()


def main(port):
    """创建一个WEB服务器"""
    wsgi_server = WSGIServer(port)
    print("服务器已开启")
    wsgi_server.run_forever()


if __name__ == '__main__':
    port = 1902     # 指定端口
    main(1902)**

接下来要将写好的.py文件上传到服务器中
进入服务器的文件选项中,进入wwwroot文件夹

在wwwroot中新建一个文件夹,自主命名,进入文件夹中


单击开始上传

5.与服务器通讯测试(一)

6.服务器配置·建立通讯数据存储池

7.与服务器通讯测试(二)

8.单片机配置·通讯板控制程序

9.单片机与通讯板连接

10.单片机配置·数据采集程序

11.服务器配置·数据池处理

11.服务器配置·数据展示

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了AT的使用,而开发板提供了大量能使我们快速便捷地处理数据的函数和方法。接下来将会讲到

本文标签: 指令模块服务器Air724UGlte