IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 华为云IoT智慧物流案例04 | 4G网卡拨号(广和通L610-CAT.1模组)与北斗定位模组(中科微电子)数据解析 -> 正文阅读

[嵌入式]华为云IoT智慧物流案例04 | 4G网卡拨号(广和通L610-CAT.1模组)与北斗定位模组(中科微电子)数据解析

华为云IoT智慧物流案例04 | 4G网卡拨号(广和通L610-CAT.1模组)与北斗定位模组(中科微电子)数据解析

回顾

衔接上个章节,稍微调整代码,令1个IIC接口同时接入2个设备并获取数据。
程序修改
1
2
3
4
5

//作者:实柏
//日期:2021-6-30

/************************************************************/
//包含头文件
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/ioctl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/select.h>
#include<sys/time.h>
#include<errno.h>
//宏定义

#define SHT30_Address                               0x44         //1000100
#define BH1750_Address                              0x23         //0100011
#define I2C_RETRIES                                 0x0701
#define I2C_TIMEOUT                                 0x0702
#define I2C_SLAVE                                   0x0703       //IIC从器件的地址设置
#define I2C_BUS_MODE                                0x0780

typedef unsigned char uint8;
int fd = -1;

//函数声明
static uint8 dev_Init(void);
static uint8 BH1750_IIC(void);
static uint8 SHT30_IIC(void);
static uint8 BH1750_Dat_To_Lux(uint8* buf);

//
static uint8 dev_Init(void)
{
    fd  = open("/dev/i2c-0", O_RDWR);               // open file and enable read and  write

    if (fd < 0)
    {
        perror("Can't open /dev/BH1750 \n");       // open i2c dev file fail
        exit(1);
    }

    printf("open /dev/i2c-0 success !\n");          // open i2c dev file succes
    
}

static uint8 BH1750_IIC(void)
{
    if (ioctl(fd, I2C_SLAVE,BH1750_Address) < 0)
    { //set i2c address
        printf("fail to set i2c device slave address!\n");
        close(fd);
        return - 1;
    }

    printf("set slave address to 0x%x success!\n", BH1750_Address);
    return (1);
}

static uint8 SHT30_IIC(void)
{
    if (ioctl(fd, I2C_SLAVE,SHT30_Address) < 0)
    { //set i2c address
        printf("fail to set i2c device slave address!\n");
        close(fd);
        return - 1;
    }

    printf("set slave address to 0x%x success!\n", SHT30_Address);
    return (1);
}

static uint8 BH1750_Dat_To_Lux(uint8* buf)
{
    uint8 lux = 0;
    lux = buf[0];
    lux <<=8;
    lux += buf[1];
    lux = (int)(lux / 1.2);
}

// main
int main(int argc, char * argv[])
{
    unsigned char buf[8] = {0};
    dev_Init();
    usleep(1000 * 100);
    uint8 light = 0;
    float temperature=0;
    float humidity=0;
    while (1)
    {
    BH1750_IIC();
    usleep(1000 * 100);
    buf[0] = 0x20;
    if ( write(fd, buf, 1) != 1 ) {
        perror("faile to write config.\n");
        return -1;
    }
    buf[0] = 0;
    if (read(fd, buf, 2) != 2 ) {
        perror("faile to read back configure data.\n");
        return -1;
    }    
    printf("BH1750 0x%x 0x%x \n", buf[0], buf[1] );
    light = BH1750_Dat_To_Lux(buf);
    printf("light: %5d lux\r\n",light);
    usleep(1000 * 200);
    SHT30_IIC();
    usleep(1000 * 100);
    buf[0] = 0x2C;
    buf[1] = 0x0D;
    if ( write(fd, buf, 2) != 2 ) {
        perror("faile to write config.\n");
        return -1;
    }
    buf[0] = 0;
    buf[1] = 0;
    if (read(fd, buf, 6) != 6 ) {
        perror("faile to read back configure data.\n");
        return -1;
    }    
    printf("SHT30---->: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x \n", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5] );
    temperature = ((float)((buf[0]<<8)+buf[1]))*175/65535-45;
    humidity = ((float)((buf[3]<<8)+buf[4]))*100/65535;
    printf("temperature:%f   humidity:%f\r\n",temperature,humidity);
    usleep(1000 * 200);
    }
    close(fd);
}

编译运行
光强度与温湿度

第一章 广和通L610-CAT.1模组调测和拨号脚本编写并验证网络

1.连接广和通L610-CAT.1模组,背面插入SIM物联网卡(缺口朝外)
L610模组
缺口朝外

2.AT指令测试L610模组,将右上角AT开关拨至左边与PC通信
AT开关
AT测试命令:

  1. AT+CPIN?
    +CPIN: READY //确保 SIM 卡就绪

  2. AT+CGSN? 查询 IMEI,每个模块唯一

  3. AT+CSQ(信号强度:数值越高,信号越强)
    +CSQ: 21,99 //确保模块能接收到信号

  4. AT+CFUN? (回复+CFUN: 1 确认模块正常工作模式。不是 1 则设置成 1)
    +CFUN: 1

  5. AT+CEREG?(查询驻网状态,1表示驻网成功,2/3,未注册或正在尝试搜索操作)
    +CEREG: 0,1

  6. AT+GTUSBMODE?(查询USB模式,31为PPP,32为ECM)
    +GTUSBMODE: 31

  7. AT+MIPCALL? (查询模块是否启用自动拨号功能,0未启用,1启用)
    +MIPCALL: 0串口AT测试

3.1开发板lsusb命令对USB / UART 枚举确认vid/pid(AT开关拨回右侧)
lsusb
3.2执行加载驱动命令sudo modprobe option及lsusb 和 ls /dev/ttyUSB*命令,查看USB串口驱动是否加载成功
驱动检查
驱动加载确认

4.PPP脚本编写拨号实现网络功能

4.1 检查终端是否安装 pppd(ppp拨号驱动)
命令:pppd -h
pppd
4.2 pppd连接脚本
存放路径:/etc/ppp/peers
连接脚本
连接脚本

4.3 连接建立规则脚本
存放路径:/etc/ppp/peers
连接建立规则脚本
建立规则

4.4 PPP拨号
在终端输入命令:pppd call 连接脚本名称
我这里是:pppd call L610_cat1
拨号
获取IP地址:pppd call L610_cat1 &
获取IP地址

4.5 ifconfig查询ppp网络接口是否存在
ppp网口

ping一下公网地址验证网络功能
ping www.baidu.com -I ppp0 (-I用来指定使用的网络设备)
ping
发现ping不通且会弹出这样一个问题(不能访问域名,DNS的问题)

ping
修改配置文件:vi /etc/resolv.conf
添加语句:nameserver 114.114.114.114
ping
source /etc/resolv.conf
再度ping华为云MQTT服务器地址
ping iot-mqtts.cn-north-4.myhuaweicloud.com
ping华为云
4G网络成功ping通公网

4.6 PPP 拨号参考流程图
ppp流程图

第二章 北斗定位模组(中科微电子)数据解析

1.连接北斗定位模组(串口通信方式,PPS引脚(时间脉冲信号)可不接),要接上陶瓷天线
连接后红色LED发光提示
在这里插入图片描述
模块红LED
2.查看模组发送的数据(模组连接后会自动发送数据)

  • 北斗模组是接到E53模块串口部分
    串口

  • 通过原理图我们得知连接的是串口5

  • 查询设备树文件我们知道其在Linux设备中为ttySTM3ttySTM3

  • 在终端进入/dev目录查找对应设备并查看其发送的数据

  • 命令:cat ttySTM3
    在这里插入图片描述
    可以看到北斗定位模组一直在发送各种前缀的数据信息
    数据信息
    3.查询手册将上报的数据通过程序(抓取关键字符串的算法)获取准确的定位信息(具体程序开发待后续开发QT应用)
    手册:CASIC 多模卫星导航接收机协议规范
    RMC头标识代表含义
    rmc
    rmc
    总结:

  • 广和通L610-CAT.1模组提供低功耗4G网络与华为云进行通讯,作为物联网网络的桥梁。

  • 北斗定位模组作为数据采集终端之一,可提供设备的位置信息。

这篇文章耽搁了许久因为我的模组硬件出了点问题,两位技术指导也是线上软件硬件和我一同排查问题(学到了排查的经验,阿正前辈直接把他的L610模块寄给我进行测试,流泪猫猫头.jpg),很感谢他们的热心帮助。

技术指导:
华为云社区与华为云学院:https://edu.huaweicloud.com/
人员:阿正前辈
广和通技术指导 王海亮大佬

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 12:06:30  更:2021-07-17 12:08:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:30:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码