前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【CODING x 物联网】使用 CODING CI 快速编译 NodeMCU 固件

【CODING x 物联网】使用 CODING CI 快速编译 NodeMCU 固件

原创
作者头像
小谈谈BH1XAQ
修改2020-06-03 15:37:24
1.9K0
修改2020-06-03 15:37:24
举报
文章被收录于专栏:小谈谈的专栏小谈谈的专栏

NodeMCU 是一个开源的物联网平台。 它使用 Lua 脚本语言编程。该平台基于 eLua 开源项目,底层使用 ESP8266 sdk 0.9.5 版本。该平台使用了很多开源项目, 例如 lua-cjson, spiffs. NodeMCU 包含了可以运行在 esp8266 Wi-Fi SoC 芯片之上的固件,以及基于 ESP-12 模组的硬件。

一种NodeMCU开发板
一种NodeMCU开发板

使用 NodeMCU 可以使用 Lua 脚本语言快速构建一个基于 ESP8266 的物联网项目。NodeMCU 为我们提供了很多模块支持,但受限于物联网应用体积和一些其他的原因,我们一般按需构建固件,即只选择项目中所需的模块进行编译。

几种编译方法的利弊

根据 NodeMCU 官方文档,目前提供了三种方法供开发者进行固件编译。

来源NodeMCU文档:三种推荐的固件编译方法
来源NodeMCU文档:三种推荐的固件编译方法

下面我通过一个表格来简单对比一下这三种编译方法。

云编译

Docker 编译

本地 Linux 编译

固件灵活度

不灵活

灵活

灵活

是否需要本地搭建环境

环境搭建复杂程度

较复杂

复杂

固件编译速度

由计算机性能决定

由计算机性能决定

是否受到本地网络限制

是(需要拉取外网资源)

是(需要拉取外网资源)

由表已知,云编译是使用最方便的编译方式,但因为云编辑只能对模块和一些简单的配置项进行定义,使得生成的固件整体灵活性很低。如果需要开启 SmartConfig 智能配网等功能,云编译将不能满足我们的需求,使用 Docker 和 Linux 进行编译,需要我们下载配置 Docker 或 Linux 虚拟机环境,也比较复杂。在编译固件的过程中需要拉取外网资源,往往因为网络问题导致编译时间长甚至编译失败。那么有没有一种不需要本地搭建环境还可以灵活而快速的编译 NodeMCU 固件呢?

今天我就来介绍一下,如何通过 CODING CI(CODING 持续集成)功能快速编译 NodeMCU 固件,并将固件保存在制品库中,供开发者使用。

在 CODING 中创建 DevOps 项目

首先我们需要在 CODING 中创建一个 DevOps 项目。如果你还没有 CODING 账号,请戳这里免费注册

20200531214523
20200531214523

这个项目将存放我们的 NodeMCU 固件的代码,在创建完成后,进入项目,点击代码仓库->克隆,获取项目代码仓库的地址。

20200531215040
20200531215040

自定义 NodeMCU Firmware

在本地使用 Git 工具 clone 一个 nodemcu-firmware 项目,作为本地工程。

注意

一定要使用 Git 工具 clone 项目,而不是下载项目的 zip 包。

对固件进行配置,即编辑 nodemcu-firmware/app/include 目录下的 user_model.h 和 user_config.h。这个就是根据项目需求可以自己定义了。

下面我列举一些比较常用的配置项。

  • 选择要编译的模块:在 user_model.h 中解除对应模块的注释。
20200531215527
20200531215527
  • 调整串口波特率: 定义在 user_config.h 中的 BIT_RATE_DEFAULT,因为启动时的波特率是 74880,这里将波特率配置成 74880 可以在 NodeMCU 启动时不跳乱码。
20200531215752
20200531215752
  • 只使用 Int 型(节省内存):定义在 user_config.h 中的 LUA_NUMBER_INTEGRAL。
  • Smart 智能配网(SmartConfig 或 AirKiss)配置项定义在 user_config.h 中的 WIFI_SMART_ENABLE。
  • 打包 Lua 文件,我们可以将项目的 lua 文件直接打包进固件,在烧录过程中直接写入闪存。将 lua 文件放在 /local/fs 目录中并删除工程根目录中 .gitignore 的 local/ 即可。
20200531220804
20200531220804
20200531222532
20200531222532

配置远端库

默认 clone 下来的 nodemcu-firmware 项目是带有远端库的,我们还需要配置一个 CODING 的远端库,方便我们将配置好的工程推送到 CODING,并开始编译固件。

在工程文件夹中右击,选择 Git Gui Here,选择 Remote->Add...。

20200531222745
20200531222745

Name 填写 coding,Location 填写 CODING 远端代码仓库的地址,如图,最后点击 Add。

20200531222922
20200531222922

然后就可以素质四连(Rescan、Stage Changed、SignOff、Commit)了,最后记得 Push 到 Coding。

这里需要选择好远端库,不要选 origin,选刚刚名称是 coding 的那个。(我这里远端库叫 git@e.coding)

20200531223320
20200531223320

创建制品库

我们编译好的固件将存放在制品库中,这里创建一个 Generic 型的制品库,叫 releases。

在 CODING 项目页面,选择制品库,创建仓库。

20200531224214
20200531224214

这里需要注意的是,制品仓库一定要选择 Generic,仓库地址填写 releases,如果有特殊需求可以选择制品库的权限范围。

创建持续集成任务

这也是比较关键的一步,还是在 CODING 项目页面,选择持续集成->构建计划,新建一个构建计划。

他会让你选择构建计划模板,为了方便配置,我们直接选择 CODING Generic 制品上传。

20200531224602
20200531224602

给你的构建计划起一个名字,在构建过程的第二步,选择刚刚创建的 Generic 仓库名称,取消勾选“创建后触发构建”,点击确定。

20200531224815
20200531224815

点击“...”->设置,进入构建计划设置,选择流程配置选项卡,直接使用文本编辑器,粘贴入一下内容。

代码语言:txt
复制
pipeline {
  agent {
    docker {
      registryUrl 'https://coding-public-docker.pkg.coding.net'
      image 'public/docker/ubuntu:16.04'
      reuseNode true
    }

  }
  stages {
    stage('检出') {
      steps {
        checkout([$class: 'GitSCM',
        branches: [[name: env.GIT_BUILD_REF]],
        userRemoteConfigs: [[
          url: env.GIT_REPO_URL,
          credentialsId: env.CREDENTIALS_ID
        ]]])
      }
    }
    stage('构建') {
      steps {
        sh '''apt-get update && apt-get install -y --no-install-recommends wget unzip git make python-serial srecord bc xz-utils gcc ccache tzdata vim-tiny
apt-get install -y --no-install-recommends gperf python-pip python-dev flex bison build-essential libssl-dev libffi-dev libncurses5-dev libncursesw5-dev libreadline-dev
pip install --upgrade pip'''
        sh 'V=1 make'
        sh 'tar zcvf bin.tar.gz bin'
      }
    }
    stage('推送制品') {
      steps {
        codingArtifactsGeneric(files: 'bin.tar.gz', repoName: "${env.GENERIC_REPO_NAME}", credentialsId: '${env.CODING_ARTIFACTS_CREDENTIALS_ID}', withBuildProps: true)
      }
    }
  }
}

点击右侧,保存。

CODING DevOps 极速构建计划

编译流程构建好了,我们就可以愉快的开始编译固件了吗?NO,我们还要选择一下构建计划所使用的节点池,在默认情况下会使用上海的构建节点池,但是我们在编译固件时需要拉取外网资源,这时候 CODING DevOps 极速构建计划就要登场了。

什么是 CODING DevOps 极速构建计划

CODING DevOps 推出全新“极速构建”方案,通过海外镜像资源加速提升拉取速度,支持海外节点构建以便有需求的用户使用全球服务,用户独占构建资源无需排队等待,以及通过内网将制品推送至 CODING 制品库以缩短推送时间。了解更多

在持续集成构建计划列表,点击“...”->设置,进入构建计划设置,选择基础信息选项卡,在节点池配置中选择海外节点。

20200602231604
20200602231604

选择保存修改,完成对构建节点池的配置。

开始编译!

发起一次构建。如果手动发起触发信息是手动触发,同时也支持通过代码更新自动触发构建。

20200531225412
20200531225412

我们可以通过流程图表和日志来获取构建的状态信息。

20200531225430
20200531225430

获取编译好的固件

目前 CODING 使用了腾讯云云主机为用户提供持续集成服务,构建速度非常快,大概 2 分钟后,我们发现状态变为构建成功,我们就可以去制品库下载编译好的固件包了。

20200531225804
20200531225804

在 CODING 项目页面,点击制品库,我们可以看到生成好的 bin 包。

20200531225944
20200531225944

点击下载,即可下载我们自己编译好的固件包。

点击文件名,进入制品详情,通过版本列表,我们可以获取我们曾经编译过的固件包。

20200531230143
20200531230143

参考文档

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 几种编译方法的利弊
  • 在 CODING 中创建 DevOps 项目
  • 自定义 NodeMCU Firmware
  • 配置远端库
  • 创建制品库
  • 创建持续集成任务
  • CODING DevOps 极速构建计划
  • 开始编译!
  • 获取编译好的固件
  • 参考文档
相关产品与服务
物联网
腾讯连连是腾讯云物联网全新商业品牌,它涵盖一站式物联网平台 IoT Explorer,连连官方微信小程序和配套的小程序 SDK、插件和开源 App,并整合腾讯云内优势产品能力,如大数据、音视频、AI等。同时,它打通腾讯系 C 端内容资源,如QQ音乐、微信支付、微保、微众银行、医疗健康等生态应用入口。提供覆盖“云-管-边-端”的物联网基础设施,面向“消费物联”和 “产业物联”两大赛道提供全方位的物联网产品和解决方案,助力企业高效实现数字化转型。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档