likes
comments
collection
share

嵌入式与WLAN-langchain+langGraph实现硬件与服务端的多agent交流

作者站长头像
站长
· 阅读数 26

嵌入式与WLAN

嵌入式系统和WLAN可以结合使用,以实现无线连接和通信的嵌入式应用。例如,在物联网(IoT)领域,嵌入式设备可以通过WLAN与其他设备或云平台进行通信,实现数据传输、远程控制和监测等功能。

嵌入式系统可以集成无线模块,如Wi-Fi模块或蓝牙模块,以实现无线通信能力。这些模块通过无线信号与其他设备或网络进行通信。通过使用WLAN技术,嵌入式系统可以实现无线连接、远程控制和数据传输等功能。

嵌入式开发板连接WIFI

在学习嵌入式的过程中,对于常规的点亮半载LED或是做跑马灯连接传感器已经不能满足现状了.在各种浏览资料与讨论中,发现树莓派Picow能够连接WIFI并进行一系列简单的网络操作,例如进行socket通信,http网络请求等;也就是说Picow能够作为客户端或者服务端而存在,在一个特殊的环境中他就能通过WIFI与另一台服务端进行通信操作.那么使用Picow创建一个WEB服务器

import machine
import network
import usocket as socket
# 设置 WiFi 连接
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('WIFI-name', 'WIFI-password')
# 连接成功后,打印提示信息
print('连接到 WiFi 网络...')
# 设置 LED 灯的 GPIO 引脚
led = machine.Pin(2, machine.Pin.IN)
# 创建一个简单的 HTTP 服务器
def web_server():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind(('0.0.0.1', 8080))
    s.listen(5)
    # 服务器启动成功后,打印提示信息
    print('服务器已启动,等待客户端连接...') 
    #打印pico 的ip地址
    print('network config:', wlan.ifconfig())
    conn.close()
web_server()

这段代码在树莓派PICOW上实现了一个简单的WEB服务器,那么就可以实现更多操作了.

注意:

PICOW能识别到的WIFI频段是2.4Ghz,PICOW的Wi-Fi模块使用的是IEEE 802.11b/g/n标准,而这些标准规定了2.4GHz频段的使用

树莓派作为服务端

在一个简单的WEB服务器上增加一些内容使它监听特定IP地址的GET请求来控制板载LED灯,实现对请求的响应

def web_server():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind(('0.0.0.1', 8080))
    s.listen(5)
    # 服务器启动成功后,打印提示信息
    print('服务器已启动,等待客户端连接...') 
    #打印pico 的ip地址
    print('network config:', wlan.ifconfig())
    while True:
        conn, addr = s.accept()
        request = conn.recv(1024)
        print('Content = %s' % str(request))
        #监听ON和OFF
        if 'GET /?LED=ON' in str(request):
            led.value(1)
            response="灯已打开"
        if 'GET /?LED=OFF' in str(request):
            led.value(0)
            response="灯已关闭"
        conn.send(response)
        conn.close()

树莓派如何接收网络请求

那么作为服务器端,肯定就要有能够接受请求并且进行响应以及返回响应结果的能力,向这个服务器发送请求肯定需要一个请求地址的,但这个地址不是绑定的http://0.0.0.1:8080/这个地址,而是PICOW连接的WIFI生成的IP地址也就是wlan.ifconfig()内容.在浏览器中输入该IP地址并携带参数就能够通过发送get请求的方式实现对硬件的控制.

树莓派作为客户端

能作为服务端提供服务那也就能够作为客户端对服务端进行服务请求.相比较于服务端的实现,客户端的实现就要简单很多,连接到WIFI之后,使用相应的网络请求模块进行网络请求.

from machine import Pin
import network
import usocket as socket
import urequests

# 设置 WiFi 连接
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('WIFI-name', 'WIFI-password')
# 连接成功后,打印提示信息
print('连接到 WiFi 网络...')
data = Pin(2, Pin.IN)

def web_client():
    url = 'http://xxxxxx.com/?id=1'
    response = urequests.get(url)
    print('GET request sent to', url)
    print('Response:', response.text)

web_client()

树莓派如何发送网络请求

发送网络请求的前提就是有一个能够请求的接口地址例如'xxxxx.com',然后就可以使用相应的网络请求模块进行get请求(或其他请求).

    url = 'http://xxxxxx.com/?id=1'
    response = urequests.get(url)

这就是一个简单的PICOW作为客户端发送请求的关键代码.能发送请求也能接受返回结果实现一系列的链式逻辑操作.能实现很多有意思的项目,结合langchain轻轻松松实现一个智能家居系统.

同一网络下进行操作

在同一网络下进行互相通信就很简单了,例如用手机开一个热点,硬件与电脑都连接同一个WiFi,访问对方的IP地址组成的接口就行.

不同网络下进行操作

想要访问在不同的网络下的设备就需要进行内网穿透了

什么是内网穿透

  • 内网穿透也叫做内网映射,也叫“NAT穿透”
  • 简单来说就是,让外网能访问你的内网;把自己的内网(主机)当成服务器,让外网能访问。
  • 内网穿透原理图:

嵌入式与WLAN-langchain+langGraph实现硬件与服务端的多agent交流

  • 内网穿透的工具:"Sunny-Ngrok","贝锐花生壳"等

这里使用的贝锐花生壳,简单易用,每个月都有免费的1G流量可以使用,学生认证提升到3G,可开通两条映射端口.别看只有小小1G已经很足够了.在电脑上使用比较简单,但是在嵌入式中就不太好弄了,树莓派PICOW的性能显然是没办法支持内网穿透的.若是换成树莓派4B或者树莓派5B那就可以轻松实现了.与在电脑上是一样的.

树莓派端内置agent与服务器端agent通信设想

都谈到了树莓派4B这种硬件.树莓派4B是一款功能强大、灵活易用的单板计算机,适用于各种创客和嵌入式开发项目.也就是表明了可以将部分较大的功能直接实现在树莓派中,langchain中的agent可以将控制硬件的方法函数作为工具进行调用,也可以在树莓派中使用WEB框架创建WEB服务器,可以在云端做一个或者多个Agent作为大脑进行控制树莓派响应,或者是树莓派创建一个Agent+服务器与云端的Agent进行通信,类似于下属与上级的关系.树莓派可以通过网络请求云端大脑的指令进行操作.也可以将搜集的到数据传送给云端进行分析等操作.

软件层面已经实现了这种多Agent项目了,那就是斯坦福小镇实验,总结来说就是创造了一个小镇,小镇上所有居民都是由大语言模型控制的,居民可以与环境交互,也可以与其他居民交互(最后AI数字人也展示出了社交性,比如开party)

嵌入式与WLAN-langchain+langGraph实现硬件与服务端的多agent交流

三大块核心组件:plan(规划能力),memory(记忆流),reflect(反思),这就是一个Agent的实现过程,这些数字人也是由Agent驱动的.

嵌入式与WLAN-langchain+langGraph实现硬件与服务端的多agent交流

总结

理论表明可以实现硬件与云端的多Agent通信,俗话说"三个臭皮匠赛过诸葛亮",多Agent实现效果也许会弥补一些大模型智慧程度上的缺陷.后续买一个树莓派4B再结合了langchain的langGraph实现硬件与服务端的多agent操作.

转载自:https://juejin.cn/post/7370682158103707686
评论
请登录