跳至正文

Arduino Libraries 推荐

标签:

这里是一些个人整理的,觉得比较好用的 Arduino 库,会不定期更新。

Bounce2

使用它处理防抖效果,非常不错!

Github

#include <Bounce2.h>

const byte BOUNCE_PIN = 7;

Bounce myBounce = Bounce();

/* 初始化 */
myBounce.attach(BOUNCE_PIN);
myBounce.interval(100); // interval in ms

/* 循环 */
myBounce.update();
myBounce.changed(); // 是否监测到变化
myBounce.fell(); // HIGH to LOW
myBounce.rose(); // LOW to HIGH
myBounce.read(); // 读取其状态

EventButton

专业处理按钮的库,自带防抖效果(也是基于 Bounce2),基于事件的处理方式,监听的事件类型非常丰富。

Github

#include <EventButton.h>

const byte BTN_PIN = 7;

EventButton myBtn(BTN_PIN);

/* 定义事件 */
void handleMyBtnReleased(EventButton& btn) {
  // 如果设置为按钮设置了 UserId 可以通过此方式获取,然后再基于此判断该进行什么操作
  byte userId = btn.getUserId();
  // do something...
}

/* 初始化 */
myBtn.setUserId(100);
myBtn.setReleasedHandler(handleMyBtnReleased);

/* 循环 */
myBtn.update();

ArduinoHttpClient

专业处理基于 http 的通信,例如 GET / POST…

需要注意的是,如果请求的域名不是 IP 地址,请一定要给 WiFi 配置 DNS,否则会报 DNS Failed for futurama.ink 错误。DNS 推荐腾讯云的 IPv4 DNS 119.29.29.29,具体请见这里

Github

#include <WiFi.h>
#include <ArduinoHttpClient.h>

const char* SERVER_ADDRESS = "futurama.ink";
const unsigned int SERVER_PORT = 1026;

WiFiClient wifiClient;
HttpClient httpClient(wifiClient, SEVER_ADDRESS, SERVER_PORT);

/* GET */
void doHttpGet() {
  httpClient.get("/gets/1");
  
  unsigned int statusCode = httpClient.responseStatusCode();
  String response = httpClient.responseBody();
  
  // 接下来就是基于 status code 和 response 的解析处理
}

/* POST */
void doHttpPose() {
  // {"code": "something"}
  String data = "{\"code\":\"" + String(something) + "\"}";

  httpClient.post("/posts", "application/json", data);

  unsigned int statusCode = httpClient.responseStatusCode();
  String response = httpClient.responseBody();
  
  // 接下来就是基于 status code 和 response 的解析处理
}

Arduino_JSON

专业处理 JSON

Github

#include <Arduino_JSON.h>

JSONVar obj = JSON.parse(String);
if(JSON.typeof(obj) == "undefined") {
  // 解析失败
}
else {
  if(obj.hasOwnProperty("code")) {
    unsigned int code = (int) obj["code"];
    // const char* code = (const char*) obj["code"];
    // bool code = (bool) obj["code"];
    // float code = (float) obj["code"];
    // double code = (double) obj["code"];
  }
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注