佰馬BMG700系列邊緣計算網(wǎng)關(guān)盒子,支持二次開發(fā),它采用高性能的工業(yè)級ARM高端處理器,Linux 操作系統(tǒng),集成Python開發(fā)環(huán)境和C語言開發(fā)環(huán)境,提供標(biāo)準(zhǔn)API接口及開發(fā)指導(dǎo),為用戶的應(yīng)用開發(fā)提供穩(wěn)定快捷的平臺。用戶可輕松調(diào)用系統(tǒng)各種接口及資源,打造差異化核心競爭力。
下文以佰馬BMG700系列邊緣計算網(wǎng)關(guān)為例,全面介紹網(wǎng)關(guān)是否可以二次開發(fā),二次開發(fā)要求,編程語言要求,軟件接口說明,如何編程及編譯,二次開發(fā)示例等。
二次開發(fā)要求
此二次開發(fā)指導(dǎo)文檔只適用于佰馬BMG700系列邊緣計算網(wǎng)關(guān),開始二次開發(fā)之前,請務(wù)必確認(rèn)手上的設(shè)備是 BMG700系列網(wǎng)關(guān)。
操作系統(tǒng)要求
64 位 CPU,2G 內(nèi)存,10G 硬盤
二次開發(fā)只能在 centos,redhat,ubuntu 等 linux 系統(tǒng),無法在 windows 系統(tǒng)上開發(fā)
編程語言要求
二次開發(fā)只能使用 C、C++開發(fā);需要開發(fā)者熟練掌握 socket,linux 設(shè)備文件操作。
設(shè)備資源
BMG700 邊緣計算網(wǎng)關(guān)關(guān)鍵參數(shù):
CPU: ARM 架構(gòu),主頻 528MHZ, 32K Icache, 32K Dcache
內(nèi)存: 256MB
Flash: 256MB(1G 可選),其中 128M 用戶可用
網(wǎng)口: 4 路,其中 1 路 WAN/LAN 復(fù)用
串口: 2路232, 3路485
開關(guān)量: 2路DI, 2路繼電器
模擬量: 2 路 ADC
軟件接口說明
1. 串口對應(yīng)設(shè)備文件
a) RS232_1 對應(yīng)的設(shè)備接口是/dev/ttymxc0,
b) RS232_2 對應(yīng)的設(shè)備接口是/dev/ttymxc1
c) RS485_1 對應(yīng)的設(shè)備接口是/dev/ttymxc4
d) RS485_2 對應(yīng)的設(shè)備接口是/dev/ttymxc6
e) RS485_3 對應(yīng)的設(shè)備接口是/dev/ttymxc3
2. 讀取 adc
int read_adc_raw(int adc_num)
參數(shù)說明:
adc_num: 取值 1,2,用來指示讀取哪一路 adc
返回值:返回一個 0~4096 的原始值
假設(shè)返回值是 X,需要使用公式 Y =(X/4096)*6.72 轉(zhuǎn)化成實際電壓值
3. 設(shè)置 GPIO 輸入,輸出方向
int gpio_set_dir(unsigned int gpio_num, unsigned int dir)
參數(shù)說明:
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: 對應(yīng) 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
編碼編譯
準(zhǔn)備交叉編譯環(huán)境
如要您已經(jīng)拿到我司的交叉編譯工具,那么可以先把交叉編譯工具拷貝到 linux 系統(tǒng)。 現(xiàn)假設(shè)您已經(jīng)把交叉編譯工具拷貝到 linux 系統(tǒng),比如拷到/opt/,接下來是解壓縮交叉編譯 工具:
tar xzvf staging_dir.tgz –C /opt/
配置交叉編譯環(huán)境:
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, 說明編譯環(huán)境已經(jīng)正常
一個簡單的例子:
下面以一個簡單例子來說明如何在佰馬BMG700系列邊緣計算網(wǎng)關(guān)的基礎(chǔ)上進(jìn)行二次開發(fā):
比如現(xiàn)在要讀取 adc1 的電壓值,DI1 的開關(guān)量,控制繼電器閉合,代碼如下:
#include <stdio.h>
#include <string.h>
#include <gpio.h> /* 必須 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 的內(nèi)容如下:
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
我司會提供該程序代碼;您可以在該示例代碼上直接修改。 如果上面的交叉編譯環(huán)境配置好了,那么直接 make,會生成 test 的可執(zhí)行程序,如下圖:
編譯好的可執(zhí)行文件 test 現(xiàn)在可以 tftp 到設(shè)備主板上運(yùn)行,比如你的電腦 IP 是 192.168.1.10; (注:路由器通過網(wǎng)線與電腦相連,接 LAN 口中的任何一個)
a.那么先在你的電腦上運(yùn)行 tftpd32 程序,把當(dāng)前目錄改成 test 文件所在的目錄
b. telnet 192.168.1.1 到設(shè)備,默認(rèn)用戶名跟密碼都是 admin
c. 運(yùn)行命令 tftp –r test –g 192.168.1.10 //下載 test 到設(shè)備
d. chmod a+x test //修改程序為可運(yùn)行
e: ./test //運(yùn)行程序
如果程序調(diào)試 OK,可以把該程序放到/usr/bin/目錄下
f. 如果要把該程序配置成開機(jī)運(yùn)行,那么只要在/etc/rc.local 加上該程序,如下圖:
后面的&是必須的
佰馬Baimatech,集M2M產(chǎn)品研發(fā)、IoT平臺服務(wù)、國際化運(yùn)營于一體,讓我們聯(lián)接,共創(chuàng)未來