ESP32-S3接入大模型API,对话AI
1、先使用python验证可行性
import requests url = "https://api.siliconflow.cn/v1/chat/completions" payload = { "model": "deepseek-ai/DeepSeek-R1", "messages": [ # 必须包含消息内容 {"role": "user", "content": "请解释量子计算的基本原理"} ], "stream": False, "max_tokens": 512, "temperature": 0.7, "top_p": 0.7, "top_k": 50, "frequency_penalty": 0.5, "n": 1 } headers = { "Authorization": "Bearer "your api_key"", "Content-Type": "application/json" } response = requests.request("POST", url, json=payload, headers=headers) print(response.text)
![]() |
![]() |
---|---|
![]() |
秘钥获取 |
硅基流动注册送14元免费额度,https://cloud.siliconflow.cn/i/9MqV8tO4
邀请码:9MqV8tO4
2、Postman验证POST请求结构,深化熟悉对接流程
![]() |
![]() |
---|---|
Authorization: your api key Content-Type:application/json |
Body:
{ "model": "deepseek-ai/DeepSeek-V3", "messages": [ {"role": "user", "content": "请解释量子计算的基本原理"}//问题 ], // "stream": False, "max_tokens": 512, "temperature": 0.7, "top_p": 0.7, "top_k": 50, "frequency_penalty": 0.5, "n": 1 }
实战!在esp32s3上实现ai对话:
1、使用micro python实现
因为之前验证过python的可行性,而esp32系列可以使用micro python编程,其特点是便捷高效,所以先使用mico python实现。
开发环境
编程调试下载环境:Thonny
编程语言:micro python
前置条件:烧录micro python固件(乐鑫官网中下载)
import network import time import urequests import ujson from machine import reset # ====== 配置部分 ====== SSID = 'jianzhiji' PASSWORD = '8765432111' API_KEY = "你的api密钥" API_URL = "https://api.siliconflow.cn/v1/chat/completions" def connect_wifi(): wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print(f"Connecting to {SSID}...") wlan.connect(SSID, PASSWORD) timeout = 20 while not wlan.isconnected() and timeout > 0: print(".", end="") time.sleep(1) timeout -= 1 if not wlan.isconnected(): raise RuntimeError("WiFi连接超时") print("nIP Address:", wlan.ifconfig()[0]) return wlan def api_request(): headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } # 最小化请求参数 payload = { "model": "deepseek-ai/DeepSeek-V3", "messages": [{"role": "user", "content": "hello"}], "max_tokens": 512, "temperature": 0.7, "top_p": 0.7 } try: print("n[Request]") print("Payload:", payload) response = urequests.post( API_URL, headers=headers, data=ujson.dumps(payload), timeout=20 ) print(f"n[Response] Status: {response.status_code}") if response.status_code == 200: json_resp = response.json() print("AI回复:", json_resp['choices'][0]['message']['content']) else: print("Error Response:", response.text) response.close() except Exception as e: print("[Error]", str(e)) try: print("=== 启动系统 ===") connect_wifi() api_request() except Exception as e: print("n!!! 错误:", str(e)) print("10秒后重启...") time.sleep(10) reset()
2、使用C语言实现
开发环境
编程调试下载环境:VSCOde+espidf插件
编程语言:C
终端输出结果
由于该版本等待时间过短,提问复杂问题时常常等不到回答就提示连接失败。
以下优化版本增加
1、超时策略
2、动态缓冲区扩容
3、分段传输机制
终端打印接收结果,可以成功等待接受长文本
NTP服务器
NTP服务器(Network Time Protocol Server)的作用是提供精确、统一的时间同步服务,它是互联网中时间同步的核心基础设施。以下是其核心作用:
1. 时间同步
- 核心功能:NTP服务器通过协议将设备(如计算机、手机、物联网设备)的本地时间与全球标准时间(如UTC)同步。
- 解决设备时钟漂移:硬件时钟可能因温度、电池等原因产生误差,NTP定期校准时间,确保设备间时间一致。
2. 安全协议的基础
- SSL/TLS证书验证:HTTPS通信依赖证书的有效期验证。若设备时间错误:
- 证书可能被误判为“未生效”或“已过期”,导致连接失败。
- 示例场景:你之前的ESP32代码中,若系统时间未同步,访问HTTPS API时可能因证书时间校验失败而超时。
3. 日志与调试
- 统一时间戳:设备生成的日志若时间不一致,将难以追踪问题(如分布式系统故障)。
- 示例:ESP32的日志若时间错误,无法与服务器日志对照,增加调试难度。
4. 协调分布式系统
- 跨设备协同:物联网、金融交易等场景依赖毫秒级时间同步,避免数据冲突。
- 示例:多个ESP32设备协同工作时,需严格按时间顺序执行操作。
5. NTP与SNTP的区别
- NTP:高精度(毫秒/微秒级),适用于服务器、基站等。
- SNTP(简单NTP):精简版,精度稍低(秒级),适合资源受限设备(如ESP32)。
- 你的代码:使用
esp_sntp_init()
即是为ESP32提供轻量级时间同步。
为什么你的ESP32项目需要NTP服务器?
在之前的代码中,你遇到HTTP连接超时问题,可能原因之一是:
- ESP32系统时间未同步 → SSL证书验证失败 → 服务器拒绝连接。
- 初始化SNTP后,设备获取正确时间 → 证书验证通过 → 正常通信。
总结
NTP服务器像互联网的“原子钟”,确保设备时间精准统一。对物联网设备而言,它是安全通信、协同工作的基石。