• 华林优配

    BMG8200系列智慧杆智能网关 二次开发教程

    • 时间 :2020-11-16
    • 作者 :华林优配科技
    • 浏览数 :3183

    BMG8200智慧杆网关.png


    华林优配BMG8200网关,是华林优配科技专为智慧路灯杆、智能灯杆、5G路灯杆、多功能杆等场景应用而研发的智能网关,配置7路LAN口、1路WAN口、4路POE供电、2路千兆光口等,具有强大的研讨与直接电源供给能力、设备接入能力、通信协议转换、运算处理能力、联动控制能力。智慧灯杆上众多设备包括:智能照明、视频监控、环保监测、气象监测、LED 显示屏、无线 WIFI 覆盖、 公共广播、一键报警,充电桩,微基站等,可以顺利获得BMG8200 网关一站式接入。


    智慧路灯网关融入智能网关、边缘计算等功能模块,高性能的工业级ARM高端处理器,Linux 操作系统,集成Python开发环境和C语言开发环境,给予标准API接口及开发指导,为用户的二次应用开发给予稳定快捷的平台。


    二次开发要求

    此文档只适用于华林优配科技智慧杆网关BMG8200,开始二次开发之前,请务必确认手上的设备是BMG8200系统智能网关。


    操作系统要求:

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

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


    编程语言要求:

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


    软件接口说明

    1.串口对应设备文件 

        a)  RS485对应的设备接口是/dev/ttyS1


    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 BMG8200_toolchain.tgz –C /opt/


    配置交叉编译环境:

    export PATH=$PATH:"/opt/staging_dir/toolchain-mipsel_24kc_gcc-7.3.0_musl/bin/"

    在命令行输入命令:

    mipsel-openwrt-linux-gcc,如果命令可以运行, 说明编译环境已经正常


    一个简单的例子:

    下面以一个简单例子来说明如果进行网关二次开发:

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


    #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的内容如下:

    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


    我司会给予该程序代码;您可以在该示例代码上直接修改。

    如果上面的交叉编译环境配置好了,那么直接make,会生成test的可执行程序,如下图:


    图例1.png


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

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


    图例2.png


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


    图例3.png

    图例4.png


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


    图例5.png


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


    图例6.png


    e: ./test //运行程序


    图例7.png


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


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


    图例8.png

    后面的&是必须的


    联系我们
    联系我们

    华林优配Baimatech,集M2M产品研发、IoT平台服务、国际化运营于一体,让我们联接,共创未来