ChatGPT 变生产力工具
chatGPT是一种基于人工智能技术的自然语言处理模型,它使用了深度学习算法,可以对人类语言进行理解和生成。chatGPT可以用于对话系统、智能客服、问答系统等场景,能够实现自然、流畅的对话。
chatGPT的核心技术是基于GPT(Generative Pre-trained Transformer)模型,它是一种预训练语言模型,可以通过大规模的语料库进行训练,从而学习到语言的规律和特征。在实际应用中,chatGPT可以通过微调等方式进行定制化,以适应不同的应用场景和用户需求。
chatGPT的优点包括:
- 自然流畅:chatGPT可以生成自然、流畅的语言,使得对话更加真实。
- 智能化:chatGPT可以理解用户的意图和语境,从而提供更加智能化的回答。
- 定制化:chatGPT可以通过微调等方式进行定制化,以适应不同的应用场景和用户需求。
- 高效性:chatGPT可以实现快速的响应和处理,提高用户体验。
提示:chatGPT生成代码秒便生产力工具,Ctrl+'C' / Ctrl+'V'变得更容易。chatGPT 链接 [www.laicj.cn](https://laicj.cn)。
文章目录
- ChatGPT 变生产力工具
- 1. 变生产力过程
- 1.1 编写需求
- 1.2 生成代码
- 1.3 验证代码
- Tips
- 总结
1. 变生产力过程
利用chatGPT对自然语言解析和庞大的知识库,实际使用中需求代码。
本篇文章使用网络搜索到chatGPT工具生成代码。
1.1 编写需求
运行环境:树莓派4B,Ubuntu20.04
数组包含4个连续GPIO,使用sysfs接口按照数组申请
主菜单包含申请GPIO选项和退出选项,选择gpio选项后进入子菜单;子菜单中包含控制GPIO高电平、低电平和退出选项,选择高电平选项控制GPIO高电平,选择低电平选项控制GPIO低电平,选择退出回到主菜单;主菜单可选择其他选项
1.2 生成代码
- 本文执行环境为 Ubuntu20.04,选择 bash 脚本
- 详细描述功能需求
- 生成代码
genrator
以下是实现该功能的 Bash 代码:
#!/bin/bash# 定义GPIO数组
gpio_array=(17 18 19 20)# 申请GPIO
function request_gpio() {for gpio in ${gpio_array[@]}; doecho $gpio > /sys/class/gpio/exportdoneecho "GPIO已申请"
}# 控制GPIO高电平
function set_gpio_high() {echo "请输入要控制的GPIO编号(17-20):"read gpio_numif [[ $gpio_num -ge 17 && $gpio_num -le 20 ]]; thengpio_index=$(($gpio_num-17))echo "1" > /sys/class/gpio/gpio${gpio_array[$gpio_index]}/valueecho "GPIO${gpio_num}已设置为高电平"elseecho "输入的GPIO编号无效"fi
}# 控制GPIO低电平
function set_gpio_low() {echo "请输入要控制的GPIO编号(17-20):"read gpio_numif [[ $gpio_num -ge 17 && $gpio_num -le 20 ]]; thengpio_index=$(($gpio_num-17))echo "0" > /sys/class/gpio/gpio${gpio_array[$gpio_index]}/valueecho "GPIO${gpio_num}已设置为低电平"elseecho "输入的GPIO编号无效"fi
}# 释放GPIO
function release_gpio() {for gpio in ${gpio_array[@]}; doecho $gpio > /sys/class/gpio/unexportdoneecho "GPIO已释放"
}# 主菜单
function main_menu() {while true; doecho "请选择操作:"echo "1. 申请GPIO"echo "2. 控制GPIO"echo "3. 释放GPIO"echo "4. 退出"read choicecase $choice in1)request_gpio;;2)gpio_menu;;3)release_gpio;;4)exit 0;;*)echo "无效的选项";;esacdone
}# GPIO子菜单
function gpio_menu() {while true; doecho "请选择操作:"echo "1. 控制高电平"echo "2. 控制低电平"echo "3. 退出"read choicecase $choice in1)set_gpio_high;;2)set_gpio_low;;3)break;;*)echo "无效的选项";;esacdone
}# 运行主菜单
main_menu
在树莓派上运行该脚本,即可进入主菜单,选择申请GPIO选项后,程序会自动申请数组中定义的4个GPIO。选择控制GPIO选项后,进入子菜单,可以选择控制GPIO高电平、低电平或退出。选择退出后,回到主菜单,可以选择释放GPIO或退出程序。
1.3 验证代码
本文使用GPIO核对原理图后改为 GPIO2_A0-3,需要修改GPIO编号。
GPIO编号计算公式:32 x 组号 + 8 x 组别 + io号
以GPIO2_A1为例,GPIO2组号是2,A1组别是0(A为0 B为1 C为2 D为3) ,管脚偏移量是1
GPIO编号 = 32 x 2 + 8 x 0 + 1 = 65,然后计算出其它为 64 66 67。
#!/bin/bash^M
^M
# 定义GPIO数组^M
gpio_array=(64 65 66 67)^M
^M
# 申请GPIO^M
function request_gpio() {^Mfor gpio in ${gpio_array[@]}; do^Mecho $gpio > /sys/class/gpio/export^Mdone^Mecho "GPIO已申请"^M
}^M
- Windows环境下验证代码
右击 --> 文本文档 --> 重名 --> test.sh -->粘贴刚复制代码
–> 导入到树莓派 --> 将 dos格式的 test.sh转为 unix下的文档
–> 增加执行权限 --> 验证执行结果
dos2unix test.sh
chmod +x test.sh
sh test.sh
- Linux环境下验证代码
编辑test.sh -->粘贴刚复制代码–> 增加执行权限 --> 验证执行结果
gedit test.sh
# 粘贴后保存
chmod +x test.sh
执行开启测试,本文使用Linux环境,可直接编辑直接执行。
. ./test.sh
arm@Ubuntu20:~$ ./test.sh
请选择操作:
1. 申请GPIO
2. 控制GPIO
3. 释放GPIO
4. 退出
1
./test.sh: line 9: /sys/class/gpio/export: Permission denied
./test.sh: line 9: /sys/class/gpio/export: Permission denied
./test.sh: line 9: /sys/class/gpio/export: Permission denied
./test.sh: line 9: /sys/class/gpio/export: Permission denied
GPIO已申请
请选择操作:
1. 申请GPIO
2. 控制GPIO
3. 释放GPIO
4. 退出
核验执行结果并不是预想,对比需求描述与生成结果。发现描述有误,修改描述重新生成,喜提再来一次。
#!/bin/bash# 定义GPIO数组
gpio_array=(64 65 66 67)# 导出GPIO
for gpio in ${gpio_array[@]}; doecho $gpio > /sys/class/gpio/export
done# 设置GPIO为输出模式
for gpio in ${gpio_array[@]}; doecho out > /sys/class/gpio/gpio$gpio/direction
done# 定义菜单选项
menu_options=("GPIO ${gpio_array[0]}" "GPIO ${gpio_array[1]}" "GPIO ${gpio_array[2]}" "GPIO ${gpio_array[3]}" "退出")# 定义控制选项
control_options=("高电平" "低电平" "退出")# 定义函数:控制GPIO电平
function control_gpio() {gpio=$1control=$2if [ $control == "高电平" ]; thenecho 1 > /sys/class/gpio/gpio$gpio/valueelif [ $control == "低电平" ]; thenecho 0 > /sys/class/gpio/gpio$gpio/valuefi
}# 主循环
while true; do# 显示菜单echo "请选择要控制的GPIO:"for i in ${!menu_options[@]}; doecho "$i. ${menu_options[$i]}"done# 读取用户输入read -p "请输入选项编号:" choice# 处理用户输入if [ $choice -ge 0 ] && [ $choice -lt ${#menu_options[@]} ]; thenif [ $choice -eq $((${#menu_options[@]} - 1)) ]; then# 退出breakelse# 进入控制子菜单gpio=${gpio_array[$choice]}while true; do# 显示控制子菜单echo "请选择要进行的操作:"for i in ${!control_options[@]}; doecho "$i. ${control_options[$i]}"done# 读取用户输入read -p "请输入选项编号:" control_choice# 处理用户输入if [ $control_choice -ge 0 ] && [ $control_choice -lt ${#control_options[@]} ]; thenif [ $control_choice -eq $((${#control_options[@]} - 1)) ]; then# 退出控制子菜单breakelse# 控制GPIO电平control=${control_options[$control_choice]}control_gpio $gpio $controlfielseecho "无效的选项编号,请重新输入!"fidonefielseecho "无效的选项编号,请重新输入!"fi
done# 取消导出GPIO
for gpio in ${gpio_array[@]}; doecho $gpio > /sys/class/gpio/unexport
done
该脚本使用sysfs接口控制GPIO,首先将需要使用的GPIO导出并设置为输出模式,然后进入主循环,显示菜单并读取用户输入,根据用户选择进入控制子菜单或退出程序。在控制子菜单中,显示控制选项并读取用户输入,根据用户选择控制对应GPIO的高低电平。最后取消导出GPIO。
测试后仍然没达到要求,再来一编。
Tips
- Windows下编辑文本文档为 dos环境在每行末尾会增加
^M
,执行时会引起报错;须手动清除再执行。 - Linux 执行时要确认执行文件路径
. + /path/file 为绝对路径
sh + path/file 为相对路劲
总结
科技改变生活。