发帖
2 0 0

【wb2】http - get应用

WildboarG
论坛元老

26

主题

168

回帖

4032

积分

论坛元老

积分
4032
Ai-WB2系列 30 2 6 小时前
[i=s] 本帖最后由 WildboarG 于 2025-4-25 19:42 编辑 [/i]

[wb2]http - get应用


Static Badge Static Badge Static Badge Static Badge Static Badge

🧠 什么是 HTTP GET?

HTTP GET 是最常见的网页请求方式之一,作用是 向服务器请求信息,例如获取网页、查询数据、发起通知等。

请求格式一般像这样:

GET /notify?title=警报&message=发现目标 HTTP/1.0
Host: 192.168.0.233:8080
User-Agent: my-device

这个请求访问了 192.168.0.233:8080 上的 /notify 路径,并携带了两个参数:titlemessage

📟 应用场景

  • 嵌入式设备检测到异常,通过 HTTP GET 请求发出警报;
  • IoT 设备定时上传状态;
  • 控制服务端触发自动化流程(如通知机器人、记录日志等)。

🛠️ MCU 端实现(简版)

#define WEB_SERVER "192.168.0.233"
#define WEB_PORT "8080"
#define WEB_PATH "/notify?title=警报&message=发现目标"

static const char *REQUEST = "GET " WEB_PATH " HTTP/1.0\r\n"
                             "Host: " WEB_SERVER ":" WEB_PORT "\r\n"
                             "User-Agent: wb2-device\r\n"
                             "\r\n";

void notify_task(void *pvParameters) {
  // ... DNS解析 + socket连接略
  write(sock, REQUEST, strlen(REQUEST));
  // ... 接收响应略
  close(sock);
}

🖥️ 服务端 Python 示例

用 Flask 快速搭建一个 HTTP 接收服务:

from flask import Flask, request
app = Flask(__name__)

@app.route("/notify")
def notify():
    title = request.args.get("title")
    message = request.args.get("message")
    print(f"📢 来自设备的通知:{title} - {message}")
    return "OK"

app.run(host="0.0.0.0", port=8080)

输出结果示例:

📢 来自设备的通知:警报 - 发现目标

🧪 测试方法

你可以在浏览器中直接输入:

http://192.168.0.14:8080/notify?title=测试&message=一切正常

应用测试


Bark 是一款非常方便的 iOS 推送通知工具,适合用来做 服务器/设备主动推送消息到手机。它背后的原理是:你通过一个 HTTP GET请求,把消息发送到 Bark 的服务器,Bark 会把这个消息通过 APNs 推送到你的 iPhone 上。


🔔 一句话解释:

Bark 就是一个“网页发消息 ➜ iPhone 收通知”的桥梁。


🛠️ 使用步骤:

1. 安装 Bark 应用(iOS)

去 App Store 搜索 Bark,图标是个狗头,下载安装。

2. 获取你的推送 URL

打开 Bark 后,应用会给你一个像这样的网址:

https://api.day.app/你的设备Key

这是你专属的推送地址!

3. 发送推送消息(GET 请求)

直接用浏览器、curl、或代码请求下面这个 URL:

https://api.day.app/你的设备Key/标题/内容

例如:

https://api.day.app/AbCDefGHiJ/警报/发现异常数据

你会立刻在手机上收到一条通知。

bark需要自建服务器,保护数据隐私安全。别担心,接下来带大家用docker搭建bark服务器, docker镜像仅仅只有23M大小。非常适合小型设备。比之前给大家推荐的GOFITY小的多得多。还有一点惊喜是bark不需要常驻后台,即便不启动。苹果的APNS推送也能实时发送到手机上,这就非常省电啦。

4. bark服务器的docker安装

  • 拉取docker镜像
docker pull finab/bark-server
  • 启动服务
docker run -dt \
--name bark \
-p 8080:8080 \
-v /data/bark:/data \
finab/bark-server

运行成功后先测试一下

curl http://0.0.0.0:8080/ping
{"code":200,"message":"pong","timestamp":1621936667}

5. 从wb2http get请求来将消息发到手机

在上次rd04雷达的demo(gotify [POST])上更改通知方式为(bark[GET],只需要修改NOTIFY代码的通知方式就可以了


#define WEB_SERVER "192.168.0.233"
#define WEB_PORT "8080"
#define WEB_PORTI 8080

#define WEB_PATH "/你的令牌/rador?call=1"

void notify_task(void *pvParameters);

static const char *REQUEST = "GET " WEB_PATH " HTTP/1.0\r\n"
                             "Host: " WEB_SERVER ":" WEB_PORT "\r\n"
                             "User-Agent: aithinker wb2\r\n"
                             "\r\n";
void notify_task(void *pvParameters) {
  int sockfd;
  struct sockaddr_in server_addr;

  char response[512];

  sockfd = socket(AF_INET, SOCK_STREAM, 0);
  if (sockfd < 0) {
    printf("socket failed\n");
    vTaskDelete(NULL);
  }

  server_addr.sin_family = AF_INET;
  server_addr.sin_port = htons(WEB_PORTI);
  server_addr.sin_addr.s_addr = inet_addr(WEB_SERVER);

  if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) <
      0) {
    printf("connect failed\n");
    close(sockfd);
    vTaskDelete(NULL);
  }

  printf("connected!\n");

  write(sockfd, REQUEST, strlen(REQUEST));
  int n = read(sockfd, response, sizeof(response) - 1);
  if (n > 0) {
    response[n] = '\0';
    printf("Response:\n%s\n", response);
  }

  close(sockfd);
  vTaskDelete(NULL);
}

记得在wb2开启的网页中打开哨兵,不然雷达不工作。

6. 效果

图片.png

根据我填写的rador ?call=1 除了弹窗通知,还有响铃报警。

857aaf19a67829ed5e813a4e73ee27e1.jpg

b48840775564501abf541db5e57767fd.jpg

──── 0人觉得很赞 ────

使用道具 举报

排版很好看呢
5 小时前

那我出个排版教程
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28586 个
  • 话题数: 40722 篇