MicroPython 环境下使用 ESP32 连接百度 AI 大模型

前言

在物联网领域,ESP32 由于其丰富的功能和低功耗性能成为了一种流行的选择。结合 MicroPython,它为开发者提供了一个高效的开发环量,让 Python 程序员也能轻松介入到嵌入式系统和 IoT 应用的开发之中。本文将介绍如何利用这些技术,将 ESP32 连接到百度的 AI 大模型服务中,实现智能对话和其它高级功能。

环境设置

硬件:

  • ESP32开发板,一块性能强大且成本低廉的物联网微控制器。

软件:

  • MicroPython固件:一种为微控制器优化的轻量级 Python 解释器。
  • Thonny IDE:一个简单且易于使用的 Python IDE,支持 MicroPython 开发。

选择大模型

  • 访问百度智能云官网,搜索千帆大模型,获取所需的 API 接入信息。

百度智能云官网

首页搜索:千帆大模型

Thonny上实现

连接WiFi

要让 ESP32 能够与互联网通信,首先需要连接到 WiFi。以下代码简单演示了如何在 MicroPython 中完成这一步骤:

import network
import time

# WiFi credentials
SSID = 'ssid'
PASSWORD = 'password'

# Connect to WiFi
def connect_wifi():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.connect(SSID, PASSWORD)
    print('Connecting to', SSID)

    while not wlan.isconnected():
        time.sleep(1)
        print('Waiting for connection...')
    
    print('Connected to', SSID)
    print('IP Address:', wlan.ifconfig()[0])


connect_wifi()

连接百度大模型

一旦完成 WiFi 连接,我们可以编写代码,调用百度 AI 大模型的 API。以下是一个简单的示例:

import urequests as requests
import ujson as json

def main():
    url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie_speed?access_token=粘贴你网页上调试获取的token"

    payload = json.dumps({
        "messages": [
            {
                "role": "user",
                "content": "你好"
            }
        ]
    })
    headers = {
        'Content-Type': 'application/json'
    }
    
    print("Sending payload: ", payload)
    print("Headers: ", headers)
    response = requests.post(url, headers=headers, data=payload.encode('utf-8'))

    # 打印完整的响应内容
    print("Status Code:", response.status_code)
    print("Response Text:", response.text)

if __name__ == "__main__":
    main()

注意点与坑

  1. 当我们发送数据到服务器时,特别是包含了中文的情况下,需要保证数据以 utf-8 的形式编码。

    • 错误示例:json=payload.encode('utf-8')
    • 正确示例:data=payload.encode('utf-8')

    正确的方式是对 payload 进行 utf-8 编码,然后才发送数据。错误的方式可能会导致请求失败,或返回意料之外的结果。并且参数是data,而不是json

  2. 使用 urequestsujson 能够为 MicroPython 环境提供流畅的开发体验。它们是为在资源限制更为显著的微控制器上运行而优化的库,针对这类设备和应用场景进行了特别设计。

这边还可以填写其他的参数,根据自己的需求来填写,然后复制里面的“payload”放在Thonny中

请求回应图示

完整代码

import network
import time

# WiFi credentials
SSID = '###'
PASSWORD = '###'

# Connect to WiFi
def connect_wifi():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.connect(SSID, PASSWORD)
    print('Connecting to', SSID)

    while not wlan.isconnected():
        time.sleep(1)
        print('Waiting for connection...')
    
    print('Connected to', SSID)
    print('IP Address:', wlan.ifconfig()[0])


connect_wifi()

import urequests as requests
import ujson as json

def main():
    url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie_speed?access_token=24.7d2d58b68086XXXXXXX790991.282335-81633959"

    payload = json.dumps({
        "messages": [
            {
                "role": "user",
                "content": "你好"
            }
        ]
    })
    headers = {
        'Content-Type': 'application/json'
    }
    
    print("Sending payload: ", payload)
    print("Headers: ", headers)
    response = requests.post(url, headers=headers, data=payload.encode('utf-8'))

    # 打印完整的响应内容
    print("Status Code:", response.status_code)
    print("Response Text:", response.text)

if __name__ == "__main__":
    main()


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/714681.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

内存-VSS、RSS、PSS、USS

一、 VSS 虚拟耗用内存大小,是进程可以访问的所有虚拟内存的总量,包括进程独自占用的物理内存、和其他进程共享的内存、分配但未使用的内存。 RSS 驻留内存大小,是进程当前实际占用的物理内存大小,包括进程独自占用的物理内存、…

【ROS里程计】中部分代码解释

bool OdomNodePub::Odom_Reset(ubt_odom::odomreset::Request& req, ubt_odom::odomreset::Response& res) {if(req.cmd "reset"){OdomResetFlag true;}else{OdomResetFlag false;}res.state "success";return true; } 该函数是一个ROS节点中…

如何判断一个js对象是否存在循环引用

一、背景 在前端JSON.stringfy是我们常用的一个方法,可以将一个对象序列化。 例如将如下对象序列化 const person { name: kalory, age:18}JSON.stringfy(person) // 结果 {"name":"kalory","age":18}将一个数组序列化const arr …

Modbus转Profibus网关接变频器:实现工业自动化无缝连接

一、背景 在工业自动化领域,Modbus和Profibus是两种常见的通讯协议,而变频器作为控制电机转速的重要设备。为了实现不同设备之间的无缝连接和数据传输,现场大多数采用Modbus转Profibus网关(XD-MDPB100)来解决Modbus设…

常见场景的业务逻辑漏洞以及安全设计

前言 目前常规漏洞的挖掘越来越困难,在这种情况下,我们可以多去看看业务逻辑方面的漏洞,也是复杂的系统,越有可能出现这方面的问题。本篇文章就来看看常见的一些场景下都有哪些业务漏洞。 由于本人水平有限,文章中可…

论文笔记:ATime-Aware Trajectory Embedding Model for Next-Location Recommendation

Knowledge and Information Systems, 2018 1 intro 1.1 背景 随着基于位置的社交网络(LBSNs),如Foursquare和Facebook Places的日益流行,大量用户签到数据变得可用 这些大量签到数据的可用性带来了许多有用的应用,以…

【AI实践】Dify开发应用和对接微信

自定义应用 创建应用有2种, 从应用模板创建 空白应用,也就是自定义应用 选择翻译助手 Translation assistant模板创建一个应用 自定义应用,创建一个child_accompany_bot自定的应用,用来支持家长,如何解决低龄儿童的…

LLVM后端 td文件 tablegen 模式匹配 寄存器 指令集 calling convention

目录 一、寄存器 1.1 寄存器定义 1.2 寄存器分类 二、指令集 2.1 指令集定义 2.2 模式匹配 2.2.1 PatFrags与PatFrag 2.2.2 OutPatFrag 2.2.3 PatLeaf 2.2.4 ImmLeaf 2.2.5 IntImmLeaf和FPImmLeaf 2.2.6 Pat 2.2.7 ComplexPattern 2.3 指令合法化 2.3.1 Promote…

异常向量表的设置

1、Linux Kernel中对异常向量表的填充 linux/arch/arm64/kernel/entry.S kernel_ventry 是一个定义异常向量的宏; 在该宏中,程序跳转到了b el\el\ht()\regsize()\label; 以为异常向量的第6行为例,其实就是跳转到了bl el1h_64_irq; 然后你去搜…

YOLOv10涨点改进SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

本文改进:SPPF_improve利用全局平均池化层和全局最大池化层,加入一些全局背景信息和边缘信息,从而获取全局视角信息并减轻不同尺度大小所带来的影响,强烈推荐,适合直接使用,paper创新级。 目录 1,YOLOv10介绍 1.1 C2fUIB介绍 1.2 PSA介绍 1.3 SCDown 2.SPP &SP…

哇塞,超好吃的麻辣片,一口就爱上

最近,我发现了一款让人欲罢不能的美食——食家巷麻辣片!😍 一打开包装,那浓郁的麻辣香气就扑鼻而来,瞬间刺激着我的嗅觉神经。😃食家巷麻辣片的外观色泽鲜艳,红通通的一片,看着就特…

计算机组成原理之定点除法

文章目录 定点除法运算原码恢复余数法原码不恢复余数法(加减交替法)运算规则 习题 定点除法运算 注意 (1)被除数小于除数的时候,商0 (2)接下来,有一个除数再原来的基础上&#xff0c…

Linux2-系统自有服务防火墙与计划任务

一、什么是防火墙 防火墙主要用于防范网络攻击,防火墙一般分为软件防火墙、硬件防火墙 1、Windows中的防护墙设置 2、防火墙的作用 3、Linux中的防火墙分类 Centos6、Centos6>防火墙>iptables防火墙 防火墙系统管理工具 Centos7>防火墙>firewalld防火…

单目标应用:基于三角拓扑聚合优化算法TTAO的微电网优化(MATLAB代码)

一、微电网模型介绍 微电网多目标优化调度模型简介_vmgpqv-CSDN博客 参考文献: [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、三角拓扑聚合优化算法求解微电网 2.1算法简介 三角拓扑聚合优化算法&…

USB2.0高速转接芯片CH347应用开发手册

CH347应用开发手册 V1.3 一、简介 CH347是一款USB2.0高速转接芯片,以实现USB-UART(HID串口/VCP串口)、USB-SPI、USB-I2C、USB-JTAG以及USB-GPIO等接口,分别包含在芯片的四种工作模式中。 CH347DLL用于为CH347芯片提供操作系统端的UART/SPI/I2C/JTAG/B…

Windows11和Ubuntu22双系统安装指南

一、需求描述 台式机电脑,已有Windows11操作系统,想要安装Ubuntu22系统(版本任意)。其中Windows安装在Nvme固态上,Ubuntu安装在Sata固态上,双盘双系统。开机时使用Grub控制进入哪个系统,效果图…

Win10“始终使用此应用打开”不见了怎么办?

问题背景 真是服了,昨天家里停电把我电脑系统盘固态烧掉了,于是换了个新的固态给电脑装上新系统。结果这个版本的Win10系统居然无法修改默认应用。具体问题见下面两个图,以py文件为例。 图一:“选择打开方式时没有始终使用此应用…

大模型-人类病理学的语言视觉AI助手

论文摘要翻译与评论 论文标题: A Multimodal Generative AI Copilot for Human Pathology 摘要翻译: 计算病理学领域已经在任务特定的预测模型和任务无关的自监督视觉编码器的发展方面取得了显著进展。然而,尽管生成性人工智能快速增长&a…

史上最详细的轨迹优化教程-机器人避障及轨迹平滑实现(干货满满)

有一些朋友问我到底如何用优化方法实现轨迹优化(避障轨迹平滑等),今天就出一个干货满满的教程,绝对是面向很多工业化场景的讲解,为了便于理解,我选用二维平面并给出详细代码实现,三维空间原理相…

MySQL数据操作与查询- 聚合函数和分组查询

一、聚合函数 聚合函数主要用来进行数据 汇总 。 1、sum 返回选取的某列的总和。 语法: select sum(字段名) from 表名 where 条件表达式 2、max 返回选取的某列的最大值。 语法: select max(字段名) from 表名 where 条件表达式 3、min 返…