ESP32 arduino + DeepSeek API访问
此项目主要使用ESP32-S3实现一个AI语音聊天助手,可以通过该项目熟悉ESP32-S3 arduino的开发,百度语音识别,语音合成API调用,百度文心一言大模型API的调用方法,音频的录制及播放,SD卡的读写,Wifi的配置(smartconfig方式)等基本开发方法。本项目的所有软硬件工程开源,并配备了详细的教程文档,和对应的视频教程,对零基础的同学非常适用,希望能够帮助到大家。
项目开源网址:
https://gitee.com/chging/esp32s3-ai-chat
新增 esp32实现deepseek api访问

硅基流动的deepseek R1 API免费访问
1、官网api 密钥获取
1.1官方网址
- https://siliconflow.cn/zh-cn/
1.2账号登陆
点击右侧Log in,注册登录一个自己的账号。

输入手机号注册登录。

一般这里登录成功后,会直接跳入到模型广场界面。

1.3api 密钥获取步骤
在模型广场中,可以选择一个免费的蒸馏模型进行测试。如下图,选择模型点击进去。

点击在线体验。

进入测试对话界面,可以直接输入提示词进行对话测试。

点击API密钥。

点击新建API密钥,填入描述信息,点击新建密钥。

API密钥生成成功。

2、arduino实现API访问
// 调用DeepSeek API
String DeepSeek_Get(const char* api_key, String query) {HTTPClient http;// 构建请求头http.begin("https://api.siliconflow.cn/v1/chat/completions");http.setTimeout(15000);http.addHeader("Content-Type", "application/json");http.addHeader("Authorization", "Bearer " + String(api_key));// 构建JSON请求体DynamicJsonDocument doc(3072); // 根据响应长度可能需要调整大小doc["model"] = "deepseek-ai/DeepSeek-R1-Distill-Llama-8B";JsonArray messages = doc.createNestedArray("messages");JsonObject message = messages.createNestedObject();message["role"] = "user";message["content"] = query; // 使用传入的查询参数doc["stream"] = false;doc["max_tokens"] = 512;doc["temperature"] = 0.7;doc["top_p"] = 0.7;doc["top_k"] = 50;doc["frequency_penalty"] = 0.5;doc["n"] = 1;JsonArray stop = doc.createNestedArray("stop");stop.add("null");JsonObject response_format = doc.createNestedObject("response_format");response_format["type"] = "text";// 序列化JSONString requestBody;serializeJson(doc, requestBody);Serial.println("Request Body:\n" + requestBody);// 发送POST请求int httpCode = http.POST(requestBody);String response = "";// 处理响应if (httpCode == HTTP_CODE_OK) {String payload = http.getString();Serial.println("Raw Response:\n" + payload);// 解析JSON响应DynamicJsonDocument resDoc(3072);DeserializationError error = deserializeJson(resDoc, payload);if (!error) {if (resDoc.containsKey("choices")) {response = resDoc["choices"][0]["message"]["content"].as<String>();} else {Serial.println("No 'choices' in response");}} else {Serial.print("JSON parse failed: ");Serial.println(error.c_str());}} else {Serial.printf("HTTP Error: %d - %s\n", httpCode, http.errorToString(httpCode).c_str());}http.end();return response;
}
相关文章:
ESP32 arduino + DeepSeek API访问
此项目主要使用ESP32-S3实现一个AI语音聊天助手,可以通过该项目熟悉ESP32-S3 arduino的开发,百度语音识别,语音合成API调用,百度文心一言大模型API的调用方法,音频的录制及播放,SD卡的读写,Wifi…...
最新国内 ChatGPT Plus/Pro 获取教程
最后更新版本:20250202 教程介绍: 本文将详细介绍如何快速获取一张虚拟信用卡,并通过该卡来获取ChatGPT Plus和ChatGPT Pro。 # 教程全程约15分钟开通ChatGPT Plus会员帐号前准备工作 一个尚未升级的ChatGPT帐号!一张虚拟信用卡…...
SQLMesh 系列教程4- 详解模型特点及模型类型
SQLMesh 作为一款强大的数据建模工具,以其灵活的模型设计和高效的增量处理能力脱颖而出。本文将详细介绍 SQLMesh 模型的特点和类型,帮助读者快速了解其强大功能。我们将深入探讨不同模型类型(如增量模型、全量模型、SCD Type 2 等࿰…...
三维重建(十二)——3D先验的使用
文章目录 零、最近感受和前言一、使用能够快速得到重建初始化的方法1.1 Colmap(多视角)1.2 深度估计(单视角)二、已知形状模板2.1 人脸2.2 人体2.3 动物三、刚性与非刚性约束(变形约束)3.1 刚性变形3.2 非刚性变形四、统计(深度学习)先验——从大量(3D)数据中提取信息…...
渗透利器:YAKIT 工具-基础实战教程.
YAKIT 工具-基础实战教程. YAKIT(Yak Integrated Toolkit)是一款基于Yak语言开发的集成化网络安全单兵工具,旨在覆盖渗透测试全流程,提供从信息收集、漏洞扫描到攻击实施的自动化支持。其核心目标是通过GUI界面降低Yak语言的使用…...
Kotlin 2.1.0 入门教程(二十一)数据类
数据类 数据类主要用于存储数据。 对于每个数据类,编译器会自动生成一些额外的成员函数,这些函数支持将实例打印为易读的输出、比较实例、复制实例等操作。 数据类使用 data 关键字标记: data class User(val name: String, val age: Int…...
Python学习心得数据的验证
数据的验证是指程序对用户输入的数据进行”合法“性验证 一、 数据的验证的一些方法: 方法名 描述说明 str.isdigit() 所有字符都是数字(阿拉伯数字) str.isnumeric() 所有字符都是数字 str.isalpha() 所有字符都是字母(包含中文字符) str.isalnum() 所有…...
PyQt6/PySide6 的信号与槽原理
一、核心原理剖析 1.1 观察者模式的GUI实现 信号与槽机制基于观察者模式实现解耦通信,相比传统GUI回调机制具备: 类型安全:信号参数与槽参数自动匹配松耦合:发送者无需知道接收者存在多对多连接:一个信号可绑定多个…...
jenkins 配置ssh拉取gitlab
一、生成key ssh-keygen -t rsa -b 4096 -C "root" 二、将id_rsa内容拷贝到jenkins 公钥id_rsa.pub拷贝到gitlab...
基于css实现正六边形的三种方案
方案一:通过旋转三个长方形生成正六边形 分析: 如下图所示,我们可以通过旋转三个长方形来得到一个正六边形。疑问: 1. 长方形的宽高分别是多少? 设正六边形的边长是100,基于一些数学常识,可以…...
18.Python实战:实现年会抽奖系统
目录结构 python/ ├── sql/ │ └── table.sql # 创建数据库及数据表 ├── config/ │ └── __init__.py # 数据库和Flask配置 ├── static/ │ ├── style.css # 样式文件 │ └── script.js # JavaScript脚本…...
145,【5】 buuctf web [GWCTF 2019]mypassword
进入靶场 修改了url后才到了注册页面 注测后再登录 查看源码 都点进去看看 有个反馈页面 再查看源码 又有收获 // 检查$feedback是否为数组 if (is_array($feedback)) {// 如果是数组,弹出提示框提示反馈不合法echo "<script>alert(反馈不合法);<…...
19.4.9 数据库方式操作Excel
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本节所说的操作Excel操作是讲如何把Excel作为数据库来操作。 通过COM来操作Excel操作,请参看第21.2节 在第19.3.4节【…...
什么是AI Agent的身份安全问题
什么是AI Agent的身份安全问题 AI发展背景与趋势 DeepSeek大模型R1成果引发关注,同时AI Agent元年到来,其应用将呈指数级上升,但也带来安全问题,如身份冒用风险。OpenAI创始人强调人工智能规模定律持续有效,AI Agent发展引发广泛关注,不过AI教母李飞飞指出其应定位为工…...
3.2 企业级AI Agent数据科学实战:从数据清洗到模型服务的全链路工业级方案
企业级AI Agent数据科学实战:从数据清洗到模型服务的全链路工业级方案 引言:数据科学家的Agent开发革命 IDC报告显示,优秀的数据处理流程可使大模型效果提升37%,模型推理成本降低58%。本文将揭示企业级Agent开发中数据科学家的核心方法论,通过GitHub Sentinel等案例,展…...
CAS单点登录(第7版)7.授权
如有疑问,请看视频:CAS单点登录(第7版) 授权 概述 授权和访问管理 可以使用以下策略实施授权策略以保护 CAS 中的应用程序和依赖方。 服务访问策略 服务访问策略允许您定义授权和访问策略,以控制对向 CAS 注册的…...
C语言中的对象、左值、右值、序列点、副作用的概念
对象 赋值表达式的目的就是把数据存储到内存位置上,用于存储值的数据区域统称数据对象 左值 左值是C语言中的术语,用于标识特定数据对象的名字。因此,对象指的是实际的数据存储,而左值是用于标识或定位存储位置的标签。 右值 …...
java集合框架之Map系列
前言 首先从最常用的HashMap开始。HashMap是基于哈希表实现的,使用数组和链表(或红黑树)的结构。在Java 8之后,当链表长度超过阈值时会转换为红黑树,以提高查询效率。哈希冲突通过链地址法解决。需要明确的是ÿ…...
【MediaTek】 T750 openwrt-23.05编 cannot find dependency libexpat for libmesode
MediaTek T750 T750 采用先进的 7nm 制程,高度集成 5G 调制解调器和四核 Arm CPU,提供较强的功能和配置,设备制造商得以打造精巧的高性能 CPE 产品,如固定无线接入(FWA)路由器和移动热点。 MediaTek T750 平台是一款综合的芯片组,集成了 5G SoC MT6890、12nm 制程…...
EasyX学习笔记1:线条
目录 一、线条颜色1. setlinecolor - 设置当前线条颜色2. getlinecolor - 获取当前线条颜色 二、线条样式1. setlinestyle - 设置线条样式(宽度、类型等) 三、绘制线条1. line - 绘制两点间直线2. lineto - 从当前位置画线到指定点3. linerel - 相对当前…...
HTML、Vue和PHP文件的区别与联系
一、核心区别 类型性质执行环境功能特点.html静态标记语言浏览器直接解析定义页面结构和内容,无逻辑处理能力.vue前端框架组件文件浏览器/构建工具整合HTML模板+JS逻辑+CSS样式,支持动态数据绑定和组件化开发.php服务器端脚本语言文件Web服务器执行动态生成HTML内容,支持数据…...
C#windows窗体人脸识别
一、创建一个数据库,名为TestFaceDB 里面有一张表就OK了,表名Users,表里面有几个字段我说明一下: id--------------------bigint----------------------编号 name--------------varchar(50)-----------------用户名 phone--------------v…...
53倍性能提升!TiDB 全局索引如何优化分区表查询?
作者: Defined2014 原文来源: https://tidb.net/blog/7077577f 什么是 TiDB 全局索引 在 TiDB 中,全局索引是一种定义在分区表上的索引类型,它允许索引分区与表分区之间建立一对多的映射关系,即一个索引分区可以对…...
vue字符串的常用方法,截取字符串,获取字符串长度,检索字符串
1.使用substr方法截取字符串 let str "12345"; let part str.substr(0, 3); // 截取从索引0开始到索引3的子字符串 console.log(part); // "123" 2.获取字符串长度 JavaScript中的字符串有一个 length属性,该属性可以用在VUE获取字符串的长度…...
Neo4j集群学习
文章目录 官方指导文档Neo4j因果集群核心服务器只读副本因果一致性 Neo4j集群搭建Neo4j企业版下载集群简介虚拟机准备jdk安装实施搭建访问neo4j Web服务 集群添加Core节点 官方指导文档 Neo4j 5 ClusterNeo4j 5 Basic Cluster Neo4j因果集群 集群是Neo4企业版中所提供的功能…...
【人工智能】深度学习中的梯度检查:原理详解与Python实现
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 梯度检查是深度学习模型开发中至关重要的一步,它能够验证反向传播的梯度计算是否正确,从而确保模型训练的稳定性和准确性。在本文中,我们…...
Kotlin 2.1.0 入门教程(十七)接口
接口 接口可以包含抽象方法的声明,也可以包含方法的实现。 接口与抽象类的不同之处在于,接口无法存储状态。接口可以拥有属性,但这些属性要么必须是抽象的,要么就得提供访问器的实现。 接口使用 interface 关键字来定义&#x…...
了解i2c_check_functionality()
i2c_check_functionality()用来检查设备适配器支持的标志是否要求。 打开“include/linux/i2c.h” /* Return the functionality mask */ static inline u32 i2c_get_functionality(struct i2c_adapter *adap) { return adap->algo->functionality(adap); //返回该…...
Retrieval-Augmented Generation for LargeLanguage Models: A Survey
标题:Retrieval-Augmented Generation for Large Language Models: A Survey 作者:Yunfan Gaoa , Yun Xiongb , Xinyu Gaob , Kangxiang Jiab , Jinliu Panb , Yuxi Bic , Yi Daia , Jiawei Suna , Meng Wangc , and Haofen Wang 1. By referencing ext…...
C#多线程异步连接MySQL与SQLserver数据库
C#多线程异步连接MySQL与SQLserver数据库 一、前言二、多线程异步连接数据库代码2.1代码块2.2代码说明 参考文档 一、前言 当编写代码连接多台设备上的数据库时,如果采用同步逐个连接的方式,在网络畅通的情况下连接速度尚可,但当其中一台设备…...
