前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程序员逆天骚操作,使用硬件声控触发CI/CD流水线来部署项目

程序员逆天骚操作,使用硬件声控触发CI/CD流水线来部署项目

作者头像
拿我格子衫来
发布2024-07-15 15:56:00
560
发布2024-07-15 15:56:00
举报
文章被收录于专栏:TopFE

背景

现在部署项目都是使用CI/CD流水线,而触发流水线的方式有很多,如推送代码,创建Tag,定时触发,合并请求。今天这边文章就来介绍一种新颖的流水线触发方式,声控触发。 目标是当我对着一个麦克风说,“艾瑞莉娅,帮我部署博客项目”,项目的CI/CD流水线就会被触发,从而将最新的代码部署到环境中。

要实现这一目的,我们需要软硬结合。需要硬件来采集语音指令,然后这个硬件还需要具有联网功能,因为需要根据语音指令来发送一个HTTP请求。

方案设计

要实现上面的目的,我们需要购买一个语音开发板,如果语音模块不支持联网,我们还需要一个能够联网的开发板,两者结合。然后使用GitLab 的Open API 来触发流水线。

连线

语音模块通过USB连接电脑 ESP8266 通过USB连接电脑 然后语音模块的PC4引脚连接ESP8266的 D1引脚 最后语音模块的GND引脚连接ESP8266的GND引脚(一开始没有连接,ESP怎么都接收不到🥹,我以为两个板子独立供电,信号线一连就行了,查了资料才知道,还要连个地线。)

所需材料

  • 一个语音控制板(怕有推销的嫌疑,这里不给出具体的厂家和型号,想知道的私信我)
  • 一个ESP8266的开发板
  • GitLab 实例的Access Token
  • 可以联网的WiFi

开始编码

语音控制板在天问Block上编码,需要下载安装 ESP8266 是在Arduino IDE上编码 两者都需要连接串口,没有安装芯片驱动的新电脑也需要安装驱动。

语音控制板编码,配置

唤醒词为艾希,当我们对麦克风说开始时 语音开发板会将PA4引脚的电平翻转,并通过杜邦线传递给ESP8266。然后在ESP8266的开发板里我们写处理电平变化的逻辑。

ESP8266 编码

首先要给板子连上WIFI,然后使用的是 GPIO 5 的引脚来通讯, 将语音开发板的引脚与 ESP8266的 GPIO5,也就是板子上的D1引脚使用杜邦线连接。 当GPIO5 的电平发生变化时,由高变低,或由低变高后,就会发送触发流水线的HTTP请求。需要在请求头部设置token。

代码语言:javascript
复制
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecure.h> // 引入支持SSL/TLS的客户端库
#define DEBUG_ESP_SSL
#define DEBUG_ESP_HTTP_CLIENT
#define DEBUG_ESP_WIFI
const char* ssid = "404";
const char* password = "wifi password";
const int pin = 5; // 示例使用GPIO 5

WiFiClientSecure wifiClient;  // 使用WiFiClientSecure对象
int lastPinStatus = LOW; // 用于存储上一次的引脚状态

void setup() {
  Serial.begin(115200);
  pinMode(pin, INPUT_PULLUP); // Set the GPIO pin as input with pull-up resistor

  wifiClient.setInsecure();  // 禁用证书验证

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi connected");
}

void loop() {
  int currentPinStatus = digitalRead(pin);

  Serial.println("currentPinStatus: " + String(currentPinStatus));
  Serial.println("lastPinStatus: " + String(lastPinStatus));

  if (currentPinStatus != lastPinStatus  && WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    http.begin(wifiClient, "https://gitlab.com/api/v4/projects/37423097/pipeline?ref=master");
    http.addHeader("Content-Type", "application/json");
    http.addHeader("PRIVATE-TOKEN", "Access Token");

    int httpCode = http.POST("{}");
    if (httpCode > 0) {
      String payload = http.getString();
      Serial.println("Response: " + payload);
    } else {
      Serial.println("HTTP POST failed, error: " + String(httpCode));
    }

    http.end();
  } else {
    Serial.println("Not connected to WiFi");
  }
  lastPinStatus = currentPinStatus;
  delay(10000); // Delay 10 seconds before next loop iteration
}

疑难问题解决

ESP8266 发送HTTP请求时,由于是HTTPS协议,所有需要特别注意,首先是使用这个对象WiFiClientSecure,之前使用的是WiFiClient,报错。然后发送HTTPS请求时,需要忽略证书的验证。也就是这一步 wifiClient.setInsecure(); // 禁用证书验证 排查接口问题,可以尝试在终端发送请求,确保token和接口能正常触发流水线。

效果展示

由于ESP8266 一直连接到Arduino IDE,我们可以打开串口控制台,看一些实时的信息,下图就是一个电平改变后,发送了HTTPS请求,Response就是接口返回的数据。

由于项目是公开的,大家也可以直接看到项目的流水线,流水线的触发者是创建token时填写名字,我写的是esp。 https://gitlab.com/PmcFizz/blog/-/pipelines

总结

晚点再录一个视频给大家看,如果大家需要什么资料可以私聊我。 探索新的事物,我一直在路上。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 方案设计
  • 连线
  • 所需材料
  • 开始编码
    • 语音控制板编码,配置
      • ESP8266 编码
      • 疑难问题解决
      • 效果展示
      • 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档