QPython 二维码扫描——扫码触发脚本与数据传递
功能概述
QPython 内置了二维码(以及条形码)扫描功能,通过摄像头识别并解码。调用方式非常简单:
from androidhelper import Android
droid = Android()
result = droid.scanBarcode().result
# result 是解码后的字符串
print(result)
调用后会拉起相机界面,用户对准二维码/条形码扫描,扫描完成(或手动退出)后返回结果。
支持的码类型
scanBarcode 通常支持:
- QR Code(二维码):最常用,几乎所有场景都用这个
- 条形码(多种格式):如 EAN-13、Code 128 等,商品条形码常用
典型应用场景
场景一:扫码运行远程脚本
这是最实用的场景之一。流程:
- 在电脑上写好一个 Python 脚本
- 把脚本内容上传到网络(GitHub Gist、或简单的 HTTP 服务器)
- 把脚本 URL 编码成二维码
- 手机 QPython 扫码,拿到 URL,下载并执行
import requests
from androidhelper import Android
droid = Android()
url = droid.scanBarcode().result
# 从 URL 下载脚本内容
response = requests.get(url, timeout=10)
if response.status_code == 200:
# 保存到本地
with open("remote_script.py", "w") as f:
f.write(response.text)
# 执行(注意:执行远程代码有安全风险!)
exec(response.text)
安全提示:执行从网络下载的脚本存在安全风险——代码可能被篡改或包含恶意内容。只执行你自己信任的 URL 上的脚本。
场景二:扫码配置自动化参数
把自动化脚本的参数编码成二维码,扫码后脚本自动按参数运行:
# 二维码内容(JSON 格式示例)
# {"sensor": 1, "interval": 500, "threshold": 20, "action": "photo"}
import json
from androidhelper import Android
droid = Android()
qr_content = droid.scanBarcode().result
# 解析参数
config = json.loads(qr_content)
# 根据参数启动自动化
sensor_type = config.get("sensor", 1)
interval = config.get("interval", 1000)
threshold = config.get("threshold", 10)
action = config.get("action", "toast")
droid.startSensingTimed(sensor_type, interval)
# ... 后续自动化逻辑根据 config 执行
场景三:扫码传数据
两台 QPython 设备之间可以通过二维码传递简短数据(如传感器读数、命令、配置):
# 手机 A:生成包含数据的二维码(需 qrcode 库)
import qrcode
sensor_reading = "TEMP:25.6,HUMIDITY:65%"
img = qrcode.make(sensor_reading)
img.save("data_qr.png")
# 然后展示 img 在屏幕上
# 手机 B:扫描屏幕上的二维码
result = droid.scanBarcode().result
# result == "TEMP:25.6,HUMIDITY:65%"
这种方式虽然数据量小(二维码承载的文本有限,通常几百字以内),但零依赖、不需要网络,在 IoT 场景或近距离设备间传参数很方便。
场景四:扫码登录 / 配置 WiFi
某些场景下可以把 WiFi 配置编码成二维码:
WIFI:T:WPA;S:WiFi名称;P:密码;;
QPython 扫码后可以自动连接 WiFi(部分版本支持),或者至少拿到配置信息让用户手动确认。
二维码生成的补充说明
QPython 内置扫描但没有内置生成。生成方式:
方式一:qrcode 库(推荐)
# 通过 QPYPI 安装 qrcode + pillow
import qrcode
from PIL import Image
# 简单生成
img = qrcode.make("你想编码的文本")
img.save("my_qr.png")
# 自定义
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4
)
qr.add_data("Hello QPython")
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save("custom_qr.png")
方式二:在线工具
电脑上用在线二维码生成器(如 qrserver.com)生成,保存成图片再传到手机上。如果不需要动态生成,这是最省事的。
安全注意事项
- 不要执行未知来源的扫码结果:扫码拿到 URL 后不要盲目
exec,先确认代码内容 - 二维码内容不要包含敏感信息:如果在公共场合展示,别人扫码就能看到
- 网络下载加超时和校验:下载远程脚本时务必加
timeout,下载后可以比对内容 hash
小结
二维码扫描让 QPython 多了一种「手机之间、手机和电脑之间」快速传递指令和数据的方式。最实用的场景是扫码运行远程脚本和扫码配置自动化参数,都只需要几行代码就能实现。生成二维码需要额外装 qrcode 库,或者用电脑上的在线工具生成后传到手机。
硬件与自动化到此结束。接下来是社区与资源。