草庐IT

使用微软新必应(New Bing)AI机器人生成树莓派Pico W开发板MicroPython应用程序

袁易学 2023-06-15 原文

微软新必应是一款由人工智能驱动的AI搜索引擎(基于Chat GPT4.0的先进自然语言生成模型),它能与用户进行流畅、自然、有趣的对话,并提供可靠、及时的搜索结果,以及回答用户的各种问题。我们可以使用新必应生成程序代码、诗歌、故事、歌词等内容,或者模仿名人发表段子、推文等内容。
树莓派Pico W开发板是树莓派基金会于2022年6月底发布的一款无线WiFi开发板,本文介绍使用New Bing AI机器人生成树莓派Pico W开发板MicroPython应用程序的基本方法。
1、微软新必应(New Bing)简介
微软新必应(New Bing)是一款由人工智能驱动的AI搜索引擎(基于Chat GPT4.0自然语言生成模型,比Open AI的不久前推出的GPT3.5模型要领先很多倍),它能与用户进行流畅、自然、有趣的对话,并提供可靠、及时的搜索结果,以及回答用户的各种问题。它不仅能给出问题的答案,还会注明来源,让用户更加放心。
用户可以使用自己喜欢的方式提问,无论是简单还是复杂的搜索、直接还是跟进的问题、文字还是语音输入,新必应都能理解并给出满意的回答。
新必应不仅具有强大的搜索和问答功能,还具有创意和娱乐性。用户能让新必应生成诗歌、故事、程序代码、歌词等内容,或者模仿名人发表段子、推文等内容。新必应也可以根据用户的兴趣和需求,提供个性化的建议和服务。
新必应预计于近期正式发布。由于新必应目前还处于测试阶段,如果要使用新必应还需【加入候补名单】进行申请并等待(大多需等待几天)。本人用邮箱申请New Bing帐号后,第3天就收到可以使用新必应的回复邮件。国内用户如何申请及使用新必应,可以参阅CSDN相关博文,此处不再赘述。这里仅介绍使用New Bing生成树莓派Pico W开发板MicroPython应用程序(特别说明:由于Open AI的Chat GPT3.5只更新到2021年,而树莓派Pico W开发板是2022年6月底发布的;经亲自测试,Chat GPT3.5不能胜任本文的编程任务)。
2、使用New Bing生成树莓派Pico W板载LED闪亮MicroPython程序
首先,打开浏览器,输入新必应网址https://www.bing.com/new,如图1所示。

图1
点击图1的【登录】按钮,输入已申请到的帐号和密码后,显示页面如图2所示。

图2
点击图2的【立即聊天】按钮,显示聊天新主题编辑框,如图3所示。

图3
在图3的编辑框中输入“请编写一个Raspberry Pi Pico W板载LED闪亮的MicroPython程序。”,如图4所示。

图4
New Bing AI将显示:
√ 正在搜索: Raspberry Pi Pico W MicroPython LED
√ 正在为你生成答案…
您好,这是Bing。我可以帮助您编写一个Raspberry Pi Pico W板载LED闪亮的MicroPython程序。
根据搜索结果,Pico W的板载LED不是连接到RP2040的引脚上,而是连接到无线芯片的GPIO引脚上。因此,您需要导入machine模块,并使用"LED"作为引脚名称来创建一个Pin对象。然后,您可以使用on()和off()方法来控制LED的状态。
下面是一个简单的MicroPython示例程序,它会让板载LED每隔一秒闪烁一次:

import machine
import time

led = machine.Pin("LED", machine.Pin.OUT) # 创建Pin对象

while True:
    led.on() # 打开LED
    time.sleep(1) # 等待一秒
    led.off() # 关闭LED
    time.sleep(1) # 等待一秒

接下来,将树莓派Pico W开发板与电脑相连,并将上面New Bing生成的程序复制并粘贴到Thonny IDE编辑器中,并用“NBing-LED.py”程序文件命名,如图5所示。

图5
在图5中,第2~11行是复制粘贴的New Bing所生成的程序代码,仅第1行“# Filename: NBing-LED.py”是另外录入的程序文件命名注释。
关于Thonny和树莓派Pico W的具体使用方法,可参阅本人CSDN博文“树莓派Pico W无线WiFi开发板使用方法及MicroPython编程实践”
将程序存储到树莓派Pico W开发板Flash存储器,点击Thonny的播放按钮测试New Bing AI生成的MicroPython程序,可以看到树莓派Pico W板载LED间断闪亮。
3、使用New Bing生成Pico W开发板MicroPython网络程序
现向New Bing输入问题:请编写一个用浏览器输入网址控制Raspberry Pi Pico W板载LED亮灭的Web程序。
New Bing AI显示情况及给出的MicroPython程序清单如下:

import machine
import network
import socket

led = machine.Pin("LED", machine.Pin.OUT) # 创建一个Pin对象,指定"LED"为名称和输出模式
wlan = network.WLAN(network.STA_IF) # 创建一个WLAN对象,指定STA模式
wlan.active(True) # 激活WLAN
wlan.connect('your_ssid', 'your_password') # 连接到你的WiFi网络

while not wlan.isconnected(): # 等待连接成功
    pass

print('IP address:', wlan.ifconfig()[0]) # 打印IP地址

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建一个socket对象,指定IPv4协议和TCP协议
s.bind((wlan.ifconfig()[0], 80)) # 绑定到本地IP地址和80端口
s.listen(5) # 监听最多5个连接

while True: # 无限循环
    conn, addr = s.accept() # 接受一个新的连接
    print('Got a connection from %s' % str(addr)) # 打印客户端地址
    request = conn.recv(1024) # 接收客户端发送的数据(最多1024字节)
    request = str(request) # 将数据转换为字符串
    
    if 'on' in request: # 如果请求中包含'on'字符串
        led.on() # 打开LED
        
    if 'off' in request: # 如果请求中包含'off'字符串
        led.off() # 关闭LED
        
    response = 'HTTP/1.1 200 OK\n\nHello from Raspberry Pi Pico W!' 
    conn.send(response.encode()) # 发送响应给客户端(需要编码为字节)
conn.close() 

将以上程序直接复制粘贴到Thonny编辑器;wlan.connect(‘your_ssid’, ‘your_password’)语句中,your_ssid和your_password分别替换为用户使用的无线WiFi名称及密码,程序命名为“nb_prog2.py”并存到Pico W开发板Flash。
下面测试用New Bing AI生成的以上程序。运行程序后,电脑Thonny Shell窗口将显示IP address: 192.168.1.10,它是Pico W开发板的IP地址。现在手机浏览器地址栏输入“192.168.1.10/on”,此时可看到Pico W开发板板载LED点亮。使用手机点亮Pico W板载LED及电脑Thonny Shell展示效果截图如图6和图7所示。

图6

图7
下面继续向New Bing提问:请问如何在网页上添加按钮来控制LED?
New Bing AI显示情况及给出的HTML文件清单如下:

<html>
<head>
<script>
function sendRequest(command) { // 定义一个函数,用于发送请求给Web服务器
  var xhr = new XMLHttpRequest(); // 创建一个XMLHttpRequest对象
  xhr.open("GET", command, true); // 设置请求方法为GET,请求地址为command参数,异步模式为true
  xhr.send(); // 发送请求
}
</script>
</head>
<body>
<h1>Control LED from Webpage</h1>
<button onclick="sendRequest('on')">Turn ON LED</button> <!-- 创建一个按钮,点击时调用sendRequest函数并传入'on'参数 -->
<button onclick="sendRequest('off')">Turn OFF LED</button> <!-- 创建一个按钮,点击时调用sendRequest函数并传入'off'参数 -->
</body>
</html>

您可以将这个网页保存为index.html文件,并替换之前程序中的响应内容。然后,在浏览器中输入http://<ip_address>/就可以看到这个网页,并通过点击按钮来控制LED。
现将以上HTML文件命名为“index.html”文件并存到Pico W中。
为了在前面的MicroPython程序中加载index.html文件,接下来,我们继续向New Bing提问:请问如何在之前的MicroPython程序中加入index.html文件响应内容?
New Bing AI显示情况如下:
您好,这是Bing。我可以帮您在之前的MicroPython程序中加入index.html文件响应内容。
您可以使用open函数来打开index.html文件,并读取它的内容,然后将其作为响应发送给客户端。例如,您可以在程序的开头添加以下代码:

f = open('index.html', 'r') # 打开index.html文件,以只读模式
html = f.read() # 读取文件内容,并赋值给html变量
f.close() # 关闭文件

然后,您可以将之前程序中的响应内容替换为以下代码:

response = 'HTTP/1.1 200 OK\n\n' + html # 将html变量添加到响应内容中

这样,当客户端请求根目录时,就会收到index.html文件的内容,并显示网页上的按钮。
以上答复还不是十分令人满意,我们希望New Bing能直接给出改写好的MicroPython程序,因此继续向New Bing提问:好的,请帮助改写加入index.html文件后的的MicroPython程序!
New Bing AI显示情况及改写的MicroPython程序清单如下:
您好,这是Bing。我可以帮助改写加入index.html文件后的的MicroPython程序。
以下是改写后的完整MicroPython程序:

import machine
import network
import socket

led = machine.Pin("LED", machine.Pin.OUT) # 创建一个Pin对象,指定"LED"为名称和输出模式
wlan = network.WLAN(network.STA_IF) # 创建一个WLAN对象,指定STA模式
wlan.active(True) # 激活WLAN
wlan.connect('your_ssid', 'your_password') # 连接到你的WiFi网络

while not wlan.isconnected(): # 等待连接成功
    pass

print('IP address:', wlan.ifconfig()[0]) # 打印IP地址

f = open('index.html', 'r') # 打开index.html文件,以只读模式
html = f.read() # 读取文件内容,并赋值给html变量
f.close() # 关闭文件

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建一个socket对象,指定IPv4协议和TCP协议
s.bind((wlan.ifconfig()[0], 80)) # 绑定到本地IP地址和80端口
s.listen(5) # 监听最多5个连接

while True: # 无限循环
    conn, addr = s.accept() # 接受一个新的连接
    print('Got a connection from %s' % str(addr)) # 打印客户端地址
    request = conn.recv(1024) # 接收客户端发送的数据(最多1024字节)
    request = str(request) # 将数据转换为字符串
    
    if 'on' in request: # 如果请求中包含'on'字符串
        led.on() # 打开LED
        
    if 'off' in request: // 如果请求中包含'off'字符串
        led.off() // 关闭LED
        
    response = 'HTTP/1.1 200 OK\n\n' + html 
    conn.send(response.encode()) // 发送响应给客户端(需要编码为字节)
conn.close()

将以上改写的程序复制粘贴到Thonny编辑器;wlan.connect(‘your_ssid’, ‘your_password’)语句中,your_ssid和your_password分别替换为用户使用的无线WiFi名称及密码。
仔细阅读本程序,发现if ‘off’ in request语句后的两处//注释符应修改为#,conn.send(response.encode())后的//注释符应修改为#(说明:New Bing误将这里的MicroPython语句注释用C/C++注释符“//”标注了)。
将程序命名为“main.py”文件存储到Pico W开发板Flash中。此时,Pico W开发板存储了“main.py”程序和“index.html”文件。
下面测试New Bing AI生成的main.py程序和index.html文件。点击Thonny的播放按钮运行main.py程序,在手机浏览器中输入192.168.1.10,将显示两个按钮的页面,如图8所示。

图8
在图8中,按下[Turn ON LED]按钮,Pico W板载LED点亮;按下[Turn OFF LED]按钮,Pico W板载LED熄灭。这说明New Bing AI生成的main.py程序和index.html文件正确。
从本文介绍可知,使用New Bing可以生成高质量的MicroPython应用程序。类似地,借助New Bing也可同样能生成C/C++、Java等程序代码,还可用New Bing生成TensorFlow/tf.Keras/PyTorch等AI深度学习程序代码。借助New Bing、ChatGPT等AI智能机器人平台能取代程序员的几乎90%以上的编程任务,从而大大提高软件开发的效率和缩短智能硬件等新产品的研发周期。

发布日期:2023年3月11日

有关使用微软新必应(New Bing)AI机器人生成树莓派Pico W开发板MicroPython应用程序的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  8. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  9. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  10. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

随机推荐