边缘计算网关linux开发,BMG700系列边缘计算网关二次开发说明

佰马BMG700系列边缘计算网关盒子,支持二次开发,它采用高性能的工业级ARM高端处理器,Linux 操作系统,集成Python开发环境和C语言开发环境,提供标准API接口及开发指导,为用户的应用开发提供稳定快捷的平台。用户可轻松调用系统各种接口及资源,打造差异化核心竞争力。

下文以佰马BMG700系列边缘计算网关为例,全面介绍网关是否可以二次开发,二次开发要求,编程语言要求,软件接口说明,如何编程及编译,二次开发示例等。

157bf33317222407522bca58e25624ae.png

二次开发要求

此二次开发指导文档只适用于佰马BMG700系列边缘计算网关,开始二次开发之前,请务必确认手上的设备是 BMG700系列网关。

操作系统要求

64 位 CPU,2G 内存,10G 硬盘

二次开发只能在 centos,redhat,ubuntu 等 linux 系统,无法在 windows 系统上开发

编程语言要求

二次开发只能使用 C、C++开发;需要开发者熟练掌握 socket,linux 设备文件操作。

设备资源

BMG700 边缘计算网关关键参数:

CPU: ARM 架构,主频 528MHZ, 32K Icache, 32K Dcache

内存: 256MB

Flash: 256MB(1G 可选),其中 128M 用户可用

网口: 4 路,其中 1 路 WAN/LAN 复用

串口: 2路232, 3路485

开关量: 2路DI, 2路继电器

模拟量: 2 路 ADC

软件接口说明

1. 串口对应设备文件

a)  RS232_1 对应的设备接口是/dev/ttymxc0,

b)  RS232_2 对应的设备接口是/dev/ttymxc1

c)  RS485_1 对应的设备接口是/dev/ttymxc4

d)  RS485_2 对应的设备接口是/dev/ttymxc6

e)  RS485_3 对应的设备接口是/dev/ttymxc3

2. 读取 adc

int read_adc_raw(int adc_num)

参数说明:

adc_num: 取值 1,2,用来指示读取哪一路 adc

返回值:返回一个 0~4096 的原始值

假设返回值是 X,需要使用公式 Y =(X/4096)*6.72 转化成实际电压值

3. 设置 GPIO 输入,输出方向

int gpio_set_dir(unsigned int gpio_num, unsigned int dir)

参数说明:

gpio_num: 取值 GPIO_DI1,GPIO_DI2 或者 GPIO_RELAY1, GPIO_RELAY2,指示要操作哪一 路 gpio

dir: 取值DIR_IN,DIR_OUT,控制要配置成输入,还是输出

返回值: 配置成功返回 1,配置失败返回 0

4. 获取 GPIO 的值

int gpio_get_val(unsigned int gpio_num, unsigned int *val)

gpio_num: 取值 GPIO_DI1,GPIO_DI2 或者 GPIO_RELAY1, GPIO_RELAY2,指示要操作哪一 路 gpio

val: 对应 gpio 的值,有 0,1 两个取值

返回值: 获取成功返回 1,获取失败返回 0

5. 配置 GPIO 的值

int gpio_set_val(unsigned int gpio_num, unsigned int val)

gpio_num: 取值 GPIO_DI1,GPIO_DI2 或者 GPIO_RELAY1, GPIO_RELAY2,指示要操作哪一 路 gpio

val:只能 0 或者 1,其它值无法配置

返回值: 配置成功返回 1,配置失败返回 0

编码编译

准备交叉编译环境

如要您已经拿到我司的交叉编译工具,那么可以先把交叉编译工具拷贝到 linux 系统。 现假设您已经把交叉编译工具拷贝到 linux 系统,比如拷到/opt/,接下来是解压缩交叉编译 工具:

tar xzvf staging_dir.tgz –C /opt/

配置交叉编译环境:

export PATH=$PATH:"/opt/staging_dir/toolchain-arm_cortex-a7+neon_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/" 在命令行输入命令:

arm-openwrt-linux-gcc, 说明编译环境已经正常

一个简单的例子:

下面以一个简单例子来说明如何在佰马BMG700系列边缘计算网关的基础上进行二次开发:

比如现在要读取 adc1 的电压值,DI1 的开关量,控制继电器闭合,代码如下:

#include

#include

#include /* 必须 include , GPIO_DIx, GPIO_RELAYx 定义在这个头文件 */

int main(void)

{

int ret;

int raw_adc;

float voltage;

unsigned int val;

printf("start to test \n");

raw_adc = read_adc_raw(1); /* 读 ADC 通道 1 */

printf("raw adc 1 value is %d\n", raw_adc);

voltage = (float)raw_adc / 4096;

voltage *= 6.72;

printf("adc1 voltage is %.3f\n", voltage);

ret = gpio_set_dir(GPIO_DI1, DIR_IN); /* 配置 DI1 为输入 */

if (ret == 1) {

ret = gpio_get_val(GPIO_DI1, &val);

printf("GPIO_DI1 value is %d\n", val);

} else {

printf("Fails to set di dir %d\n", GPIO_DI1);

}

ret = gpio_set_dir(GPIO_RELAY1, DIR_OUT);/* 配置 RELAY1 为输出 */

if (ret == 1) {

val = 1;

ret = gpio_set_val(GPIO_RELAY1, val);

} else {

printf("Fails to set relay dir %d\n", GPIO_RELAY1);

}

return 0;

}

Makefile 的内容如下:

LIB_DIR=/opt/staging_dir/target-arm_cortex-a7+neon_uClibc-0.9.33.2_eabi/usr/lib/ INCLUDE_DIR=/opt/staging_dir/target-arm_cortex-a7+neon_uClibc-0.9.33.2_eabi/usr/include CC=arm-openwrt-linux-gcc

CFLAGS=-I $(INCLUDE_DIR) LDFLAGS=-L $(LIB_DIR)

all: test

%.o:%.c

$(CC) $(CFLAGS) -c -o $@ $^

test: test.o

$(CC) $(LDFLAGS) -o $@ $^ -lgpio

我司会提供该程序代码;您可以在该示例代码上直接修改。 如果上面的交叉编译环境配置好了,那么直接 make,会生成 test 的可执行程序,如下图:

00cdb9176fbbc9090e850272d7a690d7.png

编译好的可执行文件 test 现在可以 tftp 到设备主板上运行,比如你的电脑 IP 是 192.168.1.10; (注:路由器通过网线与电脑相连,接 LAN 口中的任何一个)

a.那么先在你的电脑上运行 tftpd32 程序,把当前目录改成 test 文件所在的目录

78308ed9e49a165142cf194f09b9edf4.png

b. telnet 192.168.1.1 到设备,默认用户名跟密码都是 admin

eb5fbeb41f60b929b29901df3e7ed796.png

236c268ddc35027f7236893c06ca77f8.png

c. 运行命令 tftp –r test –g 192.168.1.10 //下载 test 到设备

bbb6a4f8073e3910fefd0f36d7d9e31a.png

d. chmod a+x test //修改程序为可运行

5efe3e210748d696890491029de98509.png

e: ./test //运行程序

495b09fab89fd92bc45444095a130d7b.png

如果程序调试 OK,可以把该程序放到/usr/bin/目录下

f. 如果要把该程序配置成开机运行,那么只要在/etc/rc.local 加上该程序,如下图:

adbb507ac300a2f813f87a7b435028ea.png

后面的&是必须的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值