整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Axure8.0原型案例:做一个“二般”的登录窗口

录窗口在我们日常使用应用或者打开网站时都会碰到,已经屡见不鲜,今天浏览网页的时候,看到一个登录窗口,感觉动效还挺好的,就用Axure做了一个原型,供大家参考学习。

效果描述

1、Email获取焦点时,提示文案“Email”变小上移,同时下划线变色显示待输入状态;失去焦点时,无输入则返回默认状态,有输入则只有下划线回到默认状态,Code输入同理。

元件准备

Email输入框:“Email”文本+无边框文本框+下划线(Code同理)

滑动验证:滑块动态面板+底层滑道

登录按钮:登录按钮

命名:“Email”文本命名“hint”;无边框文本命名“input”;滑动动态面板命名为“slider”;底层滑动命名为“slider frame”;登录按钮命名为“button”。

添加用例

一、首先制作Email输入效果

无边框文本框“input”获取焦点时,Email文本“hint”变小上移,同时下划线变色显示待输入状态;失去焦点时,无输入则返回默认状态,有输入则只有下划线回到默认状态。

1、设置“hint”的选中状态为字号变小一点;画一条带颜色的下划线,命名为“line”并设置为隐藏。

2、选中“input”,添加用例“当获取焦点时,hint选中状态为Ture;hint200ms线性移到某个位置(我是直接移动到某个坐标的);且line向右滑动100s显示”。

3、为“input”失去焦点时添加用例,这里分没有输入的情况和有输入的情况,设置用例时需要添加条件,添加用例“if 文字于 input == “”时(即输入为空时),hint选中状态为False;hint200ms线性回到初始位置(我也是直接移动到初始坐标的);且line向右滑动100s隐藏”。

4、再添加用例2,其他情况时,也就是有输入的情况,添加用例“line向右滑动100s隐藏”。

5、Code输入效果模仿Email输入制作就可以了。

二、制作滑块滑动验证效果

拖动滑块进行验证,没拖到最右边,拖动结束时弹回原位置;拖到最右边,拖动结束时显示验证成功!

1、设置滑块“slider”(设置为动态面板才能添加拖动事件)可以拖动,添加用例“拖动时,slider在?水平拖动”,这时需要设置边界?,保证slider在这个边界区间滑动,而不是随意拖动位置。

这里用滑块slider的左侧和右侧所处x轴数值为边界区间,即滑块在>=左侧x坐标值、<=右侧x坐标值之间拖动,如下图所示。

用例设置界面如下:

2、设置滑块slider拖动结束时的效果,有两种情况,一是没拖到最右边,返回原位置;另一种是拖到最右边,验证通过。这边我们可以在最右边添加一个透明的元件,我用的是热区“contact”,我们可以设置滑块slider没接触到热区和接触到热区,即没拖到最右边和拖到最右边(contact和底层滑道有1像素的重叠)。

为拖动结束时,添加用例“if 区域于 slider 接触 区域于 contact,底层滑道slider frame设置文本为 恭喜您,验证通过!;slider设置文本为对号(用的是字体图标)”(提示:这里的设置文本,都是选择的富文本,不是值,因为富文本可以编辑字体的颜色和大小等属性)。

3、再添加用例2,其他情况时,即没有接触到contact时,添加用例“回到拖动前位置”。

三、制作登录按钮移入和点击状态。

登录按钮“button”移入时有反馈,点击有反馈,点击后回到默认状态,所以要设置悬停和按下状态(上面说的选中状态的设置就在这里设置)。

完成,生成Html预览

按下“F5”预览下,看看实际效果吧!

有问题可以随时交流哦!

本文由 @ 焦户易美 (微信公众号“焦户易美”)原创发布于人人都是产品经理。未经许可,禁止转载。

文将讲述:“争取一致性”、“追求通用性”、“提供信息反馈”、“避免错误”、“对话需要一个完结”、“允许撤销操作”、“给用户掌控感”、 “减少短时记忆负担”这八个黄金法则如何应用到对话用户界面的设计中去?

在技术发展过程中,设计往往会被忽略,精心设计的用户界面或用户体验经常被事后处理。但实际上,没有好的设计,技术本身也无法体现出它应有的意义。

Ben Shneiderman 是美国马里兰大学人机交互实验室的计算机科学家和教授,在他的 《设计用户界面:有效的人机交互策略》一书中,介绍了界面设计的八个黄金法则,受到了巨头企业和用户体验设计师的广泛好评和追捧。

而在构建对话机器人时,该如将这八个黄金法则应用到对话用户界面(CUI)的设计当中?

一、争取一致性

在对话设计的过程中,首先要实现虚拟人物性格的一致性

用户在与对话机器人互动时都会根据它的所作所说赋予它一个“人设”。所以,最好在前期把角色设定好,并用统一标准的语气和性格设计对话,逐步建立用户对品牌的信任。

当设计类似的对话响应和操作时,可以利用统一风格的卡片、颜色、用户流程图来实现一致性。规范信息表现的方式可以减少用户认知负担,让用户体验易懂流畅。

二、追求通用性

认识到不同用户的多样性需求和可塑性设计,考虑到新手与专家的差异、年龄范围、残障人士、国籍差异、技术多样性等因素都会丰富指导设计的要求。

为新用户提供注释,为老用户提供进阶指南、快捷方式等高级设计,都会提升交互界面设计的质量。

三、提供信息反馈

用户每完成一个操作,界面都需要给一个相应的反馈。对于经常进行的常规操作,反馈可以相对”低调”,而对于不常进行但又核心的操作,反馈应该更加明显“高调”。

反馈有很多类型,例如:声音提示、触摸感、文本提示、视觉提示以及各种类型的组合。

社交软件WhatsApp中的已读对勾图形“低调”反馈

Google Assistant 唤醒后的视觉“高调”反馈

四、 避免错误

设计对话用户界面时,应该尽量考虑如何减少用户犯错误的机会,设置对话边界是减少错误的核心方法。

为了控制对话的进程,要尽量避免设计开放式问题,例如:为用户提供一些限定的回答选择,避免问“我能为您做什么?”,而是问“您希望我帮您做X、Y还是Z?”,或者借助按钮、卡片让用户进行选择。

但如果用户在对话时发生不可避免的错误,不能只报错而不提供解决方案,请确保为用户提供简单、直观的说明,以引导他们轻松快速地解决问题。

Bot:“您希望在哪天观影?”

User:“5月30日。”

Bot:“您想去哪个电影院?”

User:“那天天气怎么样?”

Bot:“5月30日北京天气晴。在这样晴朗的天气里,您想去哪个电影院呢?“

User:“太平洋影城吧。”

Bot:“是距离您最近的太平洋影城(北京中关村店)吗?”

User:“是的。”

当用户“跑题”时,将他拉回到理想路径中。

五、 对话需要一个完结

不要让你的用户猜来猜去,告诉他们其操作会引导他们到哪个步骤。与用户的每组对话结束后需要给一个对应的反馈,让用户有一种操作完成的满足感、安全感,同时也按示他们准备好进行下面的操作。

Bot:“您选择购买5月30日,太平洋影城《大侦探皮卡丘》电影票2张,请确认信息是否正确?”

User:“没问题。”

Bot:“好的,请问您的付款方式是什么?”

User:“微信支付。”

Bot:“付款成功,谢谢购买。请到现场扫码取票,祝您观影愉快。”

“谢谢购买”消息提示表明对话完结。

六、允许撤销操作

设计人员应为用户提供明显的方式来让用户恢复之前的操作,无论是单次动作,数据输入还是整个动作序列后都应允许进行返回操作。

“这个功能减轻了焦虑,因为用户知道即便操作失误,之前的操作也可以被撤销,鼓励用户去大胆放手探索。”

七、给用户掌控感

设计时应考虑如何让用户主动去使用,而不是被动接受,要让用户感觉他们对数字空间中一系列操作了如指掌,在设计时按照他们预期的方式来获得他们的信任。让用户拥有掌控感,他们需要知道当前对话的状态、进程以及接下来要做什么。

八、 减少短时记忆负担

人的记忆力是有限的,美国认知心理学家乔治·A·米勒发现:我们的短时记忆平均每次能记住5-9条信息,例如单词、数字等,取决于信息的性质。

因此,在与用户对话过程中,要保持适当的信息层次结构,让用户去确认信息而不是去从记忆中提取,尽量让用户做“选择题”而不是“简答题”

User:“我要付款。”

Bot:“您的购物车有两张电影票,您想立即付款,还是查看购物车?”

系统为用户记忆关键信息。

打造好用的聊天机器人需要考虑以上八大黄金法则,另外也需要一些体验定义和对话设计的技巧,并且是一个持续优化的过程。打造对的体验,需要真正理解用户并达到用户的预期,多让用户享受惊喜,少让用户受到惊吓。

参考链接

The Eight Golden Rules of Interface Design:https://www.cs.umd.edu/users/ben/goldenrules.html

本文由 @奇点机智 翻译发布于人人都是产品经理,未经许可,禁止转载

题图来自Unsplash,基于CC0协议

者 | Haor.L

责编 | 王晓曼

出品 | CSDN博客

笔者最近参加了校内的一场物联网开发竞赛,从零开始,踩坑无数,感觉很多时候事情都不像预料的一样发展,离开了美好的IDE,太多事情要在板子上一步步摸索。运行失败还好,运行成功但BUG了,简直不知道从何查起

但认识了M5Stack简单的线上系统,学习了MQTT,HTTP等数据传输方式,入门Arduino和MIrcopython等开发语言,接触ESP32的板子,感受最深的一点就是,物联网的准入门槛并没有那么高,成本也没有那么高,但这还是一片混沌未开的区域,进场者真的可以大有所为,起码方便自己的日常生活是绰绰有余的。

总的来说,这次物联网入坑,值得!

阅读本文后你将收获:

  • 了解M5STACK这款新兴的片上系统
  • 了解这款板子的开发环境如何配置

  • 掌握ONENET数据传输

  • 掌握HTTP的GET方法

  • 会搭建笔者前几天做的项目雏形:健康码追踪系统

开发准备

本博客作为学习物联网开发的笔记,也简单的将自己的片上系统作为例程写出来。

  • ESP-IDF工具链配置:乐鑫文档
  • UIflow在线IDE
  • M5STACK的官方开发文档(很全,如果你也打算使用M5STACK系列的开发板,强烈建议从此入门)
  • 本博客项目的代码仓库(欢迎赏星):https://github.com/haoruilee/M5Stack_Healthy_code_tracer

M5STACK简介

M5STACK是一款对初学者非常友好的ESP32开发板,可以用Micropython和C编程,也可以用很简单的拖拽式编程,拥有庞大的官方文档,只是国内只在最近开始流行,油管和B站上都有官方的教学视频,也在常常更新,很有创造力的一个产品。

结构上主要分为Core和Unit,Core作为核心控件,Unit作为传感器采集数据。

下图图就是笔者自己做的产品雏形,中间的小屏幕是Core,作为主控,周围有GPS和RFID,摄像头等单元用来采集数据。

设计雏形:

由于所有的M5产品都预设了乐高块,所有你可以把他们拼在乐高模组上,油管上还有不少人用它做乐高机器人,确实是很有创意的一款产品,颜值也不错,所以笔者选择它用来开发。

环境配置

UIFlow环境

在线编程地址:UIFlow

前几天GIthub发布了远程编译器Codespace,可以看出远程编译确实是大势所趋。

这里不得不说UIFlow把物联网的门槛大大降低了,笔者配置ESP-IDF用了将近一天,而使用UIFlow可以免去一切环境配置的痛苦。

支持拖拽编程,可视化UI设计,自带例程,确实是良心产品。

ESP-IDF环境

方法一

笔者配置ESP-IDF工具链时,一开始是使用Windows系统的工具安装器。

ESP-IDF 工具安装器可在“开始”菜单中,创建一个打开ESP-IDF 命令提示符窗口的快捷方式。本快捷方式可以打开 Windows 命令提示符(即 cmd.exe),并运行 export.bat 脚本以设置各环境变量(比如 PATH,IDF_PATH 等)。

(不得不说,这个安装器的健壮性非常差!!)

安装心得:上网技巧+把系统的PATH重新检查一遍,有些卸载残余的PATH会导致玄学问题!

方法二(更推荐)

宇宙第一VS code中有插件 ESPRESSIF

可以更清楚每时每刻在干什么,也更清楚出了BUG去哪里修补。

感知模块

M5开发了很多环境传感器,包括温湿度,人体感应,RFID,摄像头等等,在官方开发文档上也都给出了相关例程和GIthub的源码链接。

笔者自己的项目使用的是RFID、GPS和Camera模块,其中除了Camera只能用ESP-IDF编程,其他单元都支持在UIFlow上在线编程,再加上,Micropython确实比C++舒服太多。

网络连接

Wi-Fi链接

M5Stack已经自己预置了Wi-Fi链接,开机就是,不过在Mircopython里写起来也很简单,下面是一个范例:

import network
SSID="YOUR-WIFI-NAME"
PASSWORD="YOUR-WIFI-PASSWORD"
wlan=None
s=None

def connectWifi(ssid,passwd):
'''
连接指定wifi
'''
global wlan
wlan=network.WLAN(network.STA_IF)
wlan.active(True)
wlan.disconnect
wlan.connect(ssid,passwd)
while(wlan.ifconfig[0]=='0.0.0.0'):
time.sleep(1)
return True

使用Mircoython的Wi-Fi模块,connect(ssid,password),就可以进入可爱的Wi-Fi连接界面了,M5GO的封装还是不错的。

NB-IOT

IOT模组需要额外配一张NB卡,某宝20就可以拿下一年500M流量,不过笔者没有继续尝试,已经有可爱的M5GO和稳定的Wi-Fi,就没探索用3G进行通讯。

HTTP通讯

接下来介绍物联网的精髓,“联网”,采集到了数据,那数据上报和传输是重中之重。

笔者觉得HTTP是最好理解,好入门的通讯协议,这里也先介绍这种方法。

建议参考视频:B站:接入中国移动ONENET平台

笔者尝试过诸如阿里云和一些外国的平台,最后发现都不如中国移动专门为物联网开发的ONENET,一来稳定,不用担心服务商跑路,而来阿里云显得太过臃肿,对入门者很不友好,最终选择了ONENET,他的HTTP封装好了很好看的数据流模板,如:

  • 位置信息可视化:

  • 自动折线图

POST上传数据创建流模板

首先需要创建一个数据流模板,用于接收传过来的数据:

发送请求

请求方式:POST

URL:http://api.heclouds.com/devices/device_id/datapoints

其中,device_id:需要替换为设备ID

注意:ONENET默认post的数据叫Datastreams,参数配置见表:

请求实例:

{
"datastreams": [{
"id": "temperature",
"datapoints": [{
"at": "2013-04-22T00:35:43",
"value": "bacd"
},
{
"at": "2013-04-22T00:55:43",
"value": 84
}
]
},
{
"id": "key",
"datapoints": [{
"at": "2013-04-22T00:35:43",
"value": {
"x": 123,
"y": 123.994
}
},
{
"at": "2013-04-22T00:35:43",
"value": 23.001
}
]
}
]
}

使用ONENET的模拟API调用可以快速熟悉数据的模式:

其中,URL的device_id,和下面的API_key换成自己设备的,可以在设备列表找到,就可以往自己设备的数据流模板传一个值为3的value。

Micropython用HTTPUIFlow里自带了HTTP模块,但是很玄学,很难用!

这里笔者用Micropython自己写了一份HTTP的传输:

def http_put_data(data):
#post data into onenet
url='http://api.heclouds.com/devices/'+DEVICE_ID+'/datapoints'
values={'datastreams':[{"id":"temperature","datapoints":[{"value":data}]}]}
jdata = json.dumps(values)
r=urequests.post(url,data=jdata,headers={"api-key":API_KEY})
return r

亲测还是很好用的,可能是UIFlow自己的json封装比较奇怪?

使用模组交互的数据传输

既然M5STACK可以同时使用多个模组,那么自然也就可以使用模组来控制数据传输:

如:使用RFID卡,控制POST:

rfid0 = unit.get(unit.RFID, unit.PORTA)

while(True):
if rfid0.isCardOn:
rsp = http_put_data(12)
emoji0.show_map([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,1,1,1,1,1,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]], 0xff0000)
else:
#wlan.disconnect
#wlan.active(False)
emoji0.show_map([[0,0,0,1,0,0,0],[0,0,0,1,0,0,0],[0,0,0,1,0,0,0],[0,0,0,1,0,0,0],[0,0,0,1,0,0,0],[0,0,0,1,0,0,0],[0,0,0,1,0,0,0]], 0xff0000)
wait(1)

第一行的rfid0 = unit.get(unit.RFID, unit.PORTA)是指定从PORTA读取RFID的射频信息

使用HTTP的GET获取b站信息

有POST就要有GET,这里介绍一个B站大佬“正负加减”的例程,获取自己的粉丝数,里面讲解也很细致,大佬也是老Geek了,关注不亏!UIFlow的GET结构:核心思想是知道哪个key是follow,可以在F5审查源代码找到:

此处的URL是

http://api.bilibili.com/x/relation/stat?vmid=99566555

UP和DOWN是控制RGB等的函数。

我的片上系统设计全过程

设计初衷在疫情管控最严格的的时候,经常能看到触目惊心的“寻找x月x日乘坐xxxx的乘客”,如果能追寻乘坐公共交通者的足迹,会给疫情管控带来很大便利。设计方法

笔者希望结合GPS,RFID和摄像头功能,做个车载的识别信息-上报信息的小系统。

具体涉及到二维码识别,RFID识别,GPS获取和HTTP上报。

然而,这个设计一开始就遇到了难题。网上购买的测温枪,他的蓝牙数据我无法解包,好像是和腾讯连连有自己的相关配置。

腾讯连连界面:

既然腾讯连连已经写到那么好了,那就不抢他的饭碗了。

既然没办法解析内容,那下面笔者将用ENV单元采集的环境温度代替乘客温度进行收发。

分模块实现RFID控制块首先声明RFID模块的串口:

rfid0 = unit.get(unit.RFID, unit.PORTA)

该段指从A口串入RFID模组

【注:M5STACK使用颜色标明了A,B,C三个Grove口,见下图】

上图中RFID的串口是红色,就对应到M5GO左侧的红色接口:

GRIVE HUB由于笔者同时还需要使用红色串口的ENV单元,因此额外购买了GROVE HUB

这样就有两个A口了。

访问设置时不需要加以区分,都从PORTA引入:

rfid0 = unit.get(unit.RFID, unit.PORTA)
env0 = unit.get(unit.ENV, unit.PORTA)

使用Emoji模块做可视化:

笔者使用循环判断是否有卡片接近,无则显示待机Emoji,有则显示✅

 #循环判断是否有卡片接近
while(True):
#熄灭RGB灯
rgb.setBrightness(0)
#清空Emoji显示
emoji0.show_map([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]], 0x000000)
#判断是否有卡片接近
if rfid0.isCardOn:
#有卡片接近显示对号
emoji0.show_map([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,1],[0,0,0,0,0,1,1],[1,0,0,0,1,1,0],[0,1,1,1,1,0,0],[0,0,1,1,0,0,0]], 0x33ff33)
#发送RFID读取到的卡片ID
rsp_RFID = http_put_RFID((str(rfid0.readUid)))
#完成后指示灯变绿
rgb.setColorAll(0x33ff33)
rgb.setBrightness(10)
else:
#可选是否断开wifi
#wlan.disconnect
#wlan.active(False)
#等待卡片接近时,Emoji展示"。。。"
emoji0.show_map([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,1,0,1,0,1,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]], 0x000000)
wait(1)

这里的Emoji模块是先在UIFlow里敲好,再进Micropython里查看的。

HTTP传输块

HTTP传输在上文已经讲了不少,这里优先介绍GPS的传输:

GPS的命令也是要加“value:”的,形如value:{“lon”:lon,“lat”:lat},这个地方一开始把笔者坑的不轻

def http_put_location(lon,lat):
'''
传输地理位置数据点至ONENET平台的location数据流
lon:longitude,经度
lat: latitude,纬度
url:http的post地址
values:请参考https://open.iot.10086.cn/doc/multiprotocol/ 文档中的"HTTP协议上传数据点模块,配置json格式信息"
API_KEY:设备发送HTTP请求的证书,请参考https://open.iot.10086.cn/doc/multiprotocol/book/develop/http/api/api-usage.html 文档中的"鉴权说明"
'''
url='http://api.heclouds.com/devices/YOUR-DEVICE-ID/datapoints'
values={'datastreams':[{"id":"location","datapoints":[{"value":{"lon":lon,"lat":lat}}]}]}
jdata = json.dumps(values)
r=urequests.post(url,data=jdata,headers={"api-key":API_KEY})
return r

这里请把YOUR-DEVICE-ID替换为自己的数据流中设备编号,参考ONENET手册。Wi-Fi连接块

UIflow里封装了很好的Wi-Fi-connect:

wifiCfg.doConnect(SSID, PASSWORD)

如果你的Micropython里没有一键Wi-Fi连接,笔者自己也实现了一个:

def connectWifi(ssid,passwd):
'''
如果您的Micropython不携带WifiCfg.doconnect,请参考本函数
函数作用:连接至名称为SSID,密码为passwd的wifi
'''
global wlan
wlan=network.WLAN(network.STA_IF)
wlan.active(True)
wlan.disconnect
wlan.connect(ssid,passwd)
while(wlan.ifconfig[0]=='0.0.0.0'):
time.sleep(1)
return True

二维码识别块

  • 本部分使用ESP-IDF编程
  • 使用的摄像头是M5CAMERA

  • 属性是OV2640

参考官方例程

//拍摄
camera_fb_t* esp_camera_fb_get
{
if (s_state == ) {
return ;
}
if(!I2S0.conf.rx_start) {
if(s_state->config.fb_count > 1) {
ESP_LOGD(TAG, "i2s_run");
}
if (i2s_run != 0) {
return ;
}
}
if(s_state->config.fb_count == 1) {
xSemaphoreTake(s_state->frame_ready, portMAX_DELAY);
}
if(s_state->config.fb_count == 1) {
return (camera_fb_t*)s_state->fb;
}
camera_fb_int_t * fb = ;
if(s_state->fb_out) {
xQueueReceive(s_state->fb_out, &fb, portMAX_DELAY);
}
return (camera_fb_t*)fb;
}

//二维码识别
void qr_recoginze(void *pdata) {

camera_fb_t *camera_config = pdata;

if(pdata==)
{
ESP_LOGI(TAG,"Camera Size err");
return;
}

struct quirc *q;
struct quirc_data qd;
uint8_t *image;
q = quirc_new;

if (!q) {
printf("can't create quirc object\r\n");
vTaskDelete ;
}
//printf("begin to quirc_resize\r\n");

if (quirc_resize(q, camera_config->width, camera_config->height)< 0)
{
printf("quirc_resize err\r\n");
quirc_destroy(q);
vTaskDelete ;
}

image = quirc_begin(q, , );
memcpy(image, camera_config->buf, camera_config->len);
quirc_end(q);

int id_count = quirc_count(q);
if (id_count == 0) {
quirc_destroy(q);
return;
}

struct quirc_code code;
quirc_extract(q, 0, &code);
quirc_decode(&code, &qd);
dump_info(q);
quirc_destroy(q);
}

这里依赖了太多官方库…建议去代码仓库翻一翻。

K210的二维码识别上文是ESP32类型的开发板识别代码,可以看到非常繁琐,改起来简直要了老命…使用Micropython的话,代码就变的可爱多了~

【此部分使用Maxipy编程】

 import sensor
import image
import lcd
import time

clock = time.clock
lcd.init
sensor.reset
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(1)
sensor.run(1)
sensor.skip_frames(30)
while True:
clock.tick
img = sensor.snapshot
res = img.find_qrcodes
fps =clock.fps
if len(res) > 0:
img.draw_string(2,2, res[0].payload, color=(0,128,0), scale=2)
print(res[0].payload)
lcd.display(img)

这里Maxipy的官方文档还给出了修正图像的方法:如果使用了镜头,画面会有扭曲,需要矫正画面使用 lens_corr 函数来矫正,比如 2.8mm, img.lens_corr(1.8)

(没事翻一翻这个Maxipy的文档还是很有启发的,大概两小时就能通读一遍)

GPS传输块

室内经常没有信号(实测室外也很少有…)因此在传递GPS的时候笔者额外设计了防止无信号的代码。

GPS的http传输函数已经在上文讲了,此处和RFID卡片控制进行结合:

if rfid0.isCardOn:
#有卡片接近显示对号
emoji0.show_map([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,1],[0,0,0,0,0,1,1],[1,0,0,0,1,1,0],[0,1,1,1,1,0,0],[0,0,1,1,0,0,0]], 0x33ff33)
#发送RFID读取到的卡片ID
rsp_RFID = http_put_RFID((str(rfid0.readUid)))
#防止测试时无信号
if str(gps0.pos_quality) != "1" and str(gps0.pos_quality) != "6":
lon=116.39137751349433
lat=39.8969585128568
else:
#默认北京
lon=gps0.longitude
lat=gps0.latitude
try:
rsp_LOCATION=http_put_location(float(lon),float(lat))
except:
emoji0.show_map([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,1],[0,0,0,0,0,1,1],[1,0,0,0,1,1,0],[0,1,1,1,1,0,0],[0,0,1,1,0,0,0]], 0xff0000)
#传输温度
rsp = http_put_data(env0.temperature)
#完成后指示灯变绿
rgb.setColorAll(0x33ff33)
rgb.setBrightness(10)
else:
#可选是否断开wifi
#wlan.disconnect
#wlan.active(False)
#等待卡片接近时,Emoji展示"。。。"
emoji0.show_map([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,1,0,1,0,1,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]], 0x000000)
wait(1)

后记

参赛时间仓促,没能完全搞明白每个引脚的用途,没有好好触摸一遍C和开发板,没有用NB-IOT通讯。没有做蓝牙通讯解包…还是有很多遗憾的,还好设备还在,可以继续探索物联网的神奇。

成果效果:

版权声明:本文为CSDN博主「Haor.L」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_46233323/article/details/106054434」

☞程序员在家办公没显示屏,我被领导鄙视了

☞Get!读懂数据科学和机器学习,看这文就够了

☞深度剖析数据库国产化迁移之路

☞Go远超Python,机器学习人才极度稀缺,全球16,655位程序员告诉你这些真相

☞我佛了!用KNN实现验证码识别,又 Get 到一招

☞超级账本Hyperledger Fabric中的Protobuf到底是什么?


上一篇:HTML之a标签的使用
下一篇:H5 事件