幫助文檔
佰馬BMG8200網(wǎng)關(guān),是佰馬科技專為智慧路燈桿、智能燈桿、5G路燈桿、多功能桿等場(chǎng)景應(yīng)用而研發(fā)的智能網(wǎng)關(guān),配置7路LAN口、1路WAN口、4路POE供電、2路千兆光口等,具有強(qiáng)大的交流與直接電源供給能力、設(shè)備接入能力、通信協(xié)議轉(zhuǎn)換、運(yùn)算處理能力、聯(lián)動(dòng)控制能力。智慧燈桿上眾多設(shè)備包括:智能照明、視頻監(jiān)控、環(huán)保監(jiān)測(cè)、氣象監(jiān)測(cè)、LED 顯示屏、無(wú)線 WIFI 覆蓋、 公共廣播、一鍵報(bào)警,充電樁,微基站等,可以通過(guò)BMG8200 網(wǎng)關(guān)一站式接入。
智慧路燈網(wǎng)關(guān)融入智能網(wǎng)關(guān)、邊緣計(jì)算等功能模塊,高性能的工業(yè)級(jí)ARM高端處理器,Linux 操作系統(tǒng),集成Python開(kāi)發(fā)環(huán)境和C語(yǔ)言開(kāi)發(fā)環(huán)境,提供標(biāo)準(zhǔn)API接口及開(kāi)發(fā)指導(dǎo),為用戶的二次應(yīng)用開(kāi)發(fā)提供穩(wěn)定快捷的平臺(tái)。
二次開(kāi)發(fā)要求
此文檔只適用于佰馬科技智慧桿網(wǎng)關(guān)BMG8200,開(kāi)始二次開(kāi)發(fā)之前,請(qǐng)務(wù)必確認(rèn)手上的設(shè)備是BMG8200系統(tǒng)智能網(wǎng)關(guān)。
操作系統(tǒng)要求:
64位CPU,2G內(nèi)存,10G硬盤
二次開(kāi)發(fā)只能在centos,redhat,ubuntu等linux系統(tǒng),無(wú)法在windows系統(tǒng)上開(kāi)發(fā)。
編程語(yǔ)言要求:
二次開(kāi)發(fā)只能使用C、C++開(kāi)發(fā);需要開(kāi)發(fā)者熟練掌握socket,linux設(shè)備文件操作。
軟件接口說(shuō)明
1.串口對(duì)應(yīng)設(shè)備文件
a) RS485對(duì)應(yīng)的設(shè)備接口是/dev/ttyS1
2.讀取adc
int read_adc_raw(int adc_num)
參數(shù)說(shuō)明:
adc_num: 取值1,2,用來(lái)指示讀取哪一路adc
返回值:返回一個(gè)0~4096的原始值
假設(shè)返回值是X,需要使用公式Y(jié) =(X/4096)*6.72 轉(zhuǎn)化成實(shí)際電壓值
3.設(shè)置GPIO輸入,輸出方向
int gpio_set_dir(unsigned int gpio_num, unsigned int dir)
參數(shù)說(shuō)明:
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: 對(duì)應(yīng)gpio的值,有0,1兩個(gè)取值
返回值:
獲取成功返回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,其它值無(wú)法配置
返回值:
配置成功返回1,配置失敗返回0
編碼編譯
準(zhǔn)備交叉編譯環(huán)境
如要您已經(jīng)拿到我司的交叉編譯工具,那么可以先把交叉編譯工具拷貝到linux系統(tǒng)。
現(xiàn)假設(shè)您已經(jīng)把交叉編譯工具拷貝到linux系統(tǒng),比如拷到/opt/,接下來(lái)是解壓縮交叉編譯工具:
tar xzvf BMG8200_toolchain.tgz –C /opt/
配置交叉編譯環(huán)境:
export PATH=$PATH:"/opt/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/bin/"
在命令行輸入命令:
mipsel-openwrt-linux-gcc,如果命令可以運(yùn)行, 說(shuō)明編譯環(huán)境已經(jīng)正常
一個(gè)簡(jiǎn)單的例子:
下面以一個(gè)簡(jiǎn)單例子來(lái)說(shuō)明如果進(jìn)行網(wǎng)關(guān)二次開(kāi)發(fā):
比如現(xiàn)在要讀取adc1的電壓值,DI1的開(kāi)關(guān)量,控制繼電器閉合,代碼如下:
#include <stdio.h>
#include <string.h>
#include <gpio.h> /* 必須 include , GPIO_DIx, GPIO_RELAYx定義在這個(gè)頭文件 */
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-mipsel_24kc_musl /usr/lib/
INCLUDE_DIR=/opt/staging_dir/target-mipsel_24kc_musl/usr/include
CC= mipsel-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ì)提供該程序代碼;您可以在該示例代碼上直接修改。
如果上面的交叉編譯環(huán)境配置好了,那么直接make,會(huì)生成test的可執(zhí)行程序,如下圖:
編譯好的可執(zhí)行文件test現(xiàn)在可以tftp到設(shè)備主板上運(yùn)行,比如你的電腦IP是192.168.1.10;(注:路由器通過(guò)網(wǎng)線與電腦相連,接LAN口中的任何一個(gè))
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)榭蛇\(yùn)行
e: ./test //運(yùn)行程序
如果程序調(diào)試OK,可以把該程序放到/usr/bin/目錄下
f. 如果要把該程序配置成開(kāi)機(jī)運(yùn)行,那么只要在/etc/rc.local加上該程序,如下圖:
后面的&是必須的
佰馬Baimatech,集M2M產(chǎn)品研發(fā)、IoT平臺(tái)服務(wù)、國(guó)際化運(yùn)營(yíng)于一體,讓我們聯(lián)接,共創(chuàng)未來(lái)