【雕爷学编程】MicroPython动手做(27)——物联网之掌控板小程序3
知识点:什么是掌控板?
掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED显示屏、RGB灯、加速度计、麦克风、光线传感器、蜂鸣器、按键开关、触摸开关、金手指外部拓展接口,支持图形化及MicroPython代码编程,可实现智能机器人、创客智造作品等智能控制类应用。



1、物联网(Internet of Things,缩写:IoT)
是基于互联网、传统电信网等信息承载体,让所有能行使独立功能的普通物体实现互联互通的网络。其应用领域主要包括运输和物流、工业制造、健康医疗、智能环境(家庭、办公、工厂)等,具有十分广阔的市场前景。
物联网的概念最早是在1999年由Kevin Ashton在一次演讲中提出来的,当时他是一个RFID研究机构的执行主任,这家研究机构是在宝洁公司和吉列公司的赞助下成立的。而他本人也因此被称为物联网之父。随后麻省理工学院的Neil Gershenfeld教授出版了一本名为《When things Start to Think》的书。以这些为标志,正式揭开了物联网的序幕。
物联网的英文是Internet of Things,缩写为IoT。这里的“物”指的是我身边一切能与网络联通的物品。例如你带的手表、你骑的共享单车、马路上的汽车、家里的冰箱、路边的路灯、甚至是一棵树。只要一件物品能够与网络相连,它就都是物联网中的“物”。而所谓物联网,就是“物”与人,以及“物”与“物”之间,通过网络来传递和处理信息。

1、微信小程序
小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。全面开放申请后,主体类型为企业、政府、媒体、其他组织或个人的开发者,均可申请注册小程序。微信小程序、微信订阅号、微信服务号、微信企业号是并行的体系。
微信小程序是一种不用下载就能使用的应用,也是一项创新,经过将近两年的发展,已经构造了新的微信小程序开发环境和开发者生态。微信小程序也是这么多年来中国IT行业里一个真正能够影响到普通程序员的创新成果,已经有超过150万的开发者加入到了微信小程序的开发,与我们一起共同发力推动微信小程序的发展,微信小程序应用数量超过了一百万,覆盖200多个细分的行业,日活用户达到两个亿,微信小程序还在许多城市实现了支持地铁、公交服务。微信小程序发展带来更多的就业机会,2017年小程序带动就业104万人,社会效应不断提升。
2017年1月9日,张小龙在2017微信公开课Pro上发布的微信小程序正式上线。2018年2月,微信官方发布公告称:已对涉及假货高仿、色情低俗和违规“现金贷”等超过2000个微信小程序,进行永久封禁处理。2019年8月9日,微信向开发者发布新能力公测与更新公告,微信PC版新版本中,支持打开聊天中分享的微信小程序。

7、带输入框的RGB三色调光板
刚添加的小程序控制组件面板

#MicroPython动手做(27)——物联网之微信小程序
#带输入框的RGB三色调光板
#MicroPython动手做(27)——物联网之微信小程序
#带输入框的RGB三色调光板from mpython import *
import network
import time
import music
from umqtt.simple import MQTTClient
from machine import Timer
import machine
import ubinascii
import ujsonmy_wifi = wifi()my_wifi.connectWiFi("zh", "zy1567")def OneNET_recv(_msg):pass
_OneNET_msg_list = []
def OneNET_callback(_topic, _msg):global _OneNET_msg_listtry: _msg = _msg.decode('utf-8', 'ignore')except: print(_msg);returnOneNET_recv(_msg)if _msg in _OneNET_msg_list:eval('OneNET_recv_' + bytes.decode(ubinascii.hexlify(_msg)) + '()')tim14 = Timer(14)_iot_count = 0
def timer14_tick(_):global _iot, _iot_count_iot_count = _iot_count + 1if _iot_count == 1000: _iot.ping(); _iot_count = 0try: _iot.check_msg()except: machine.reset()_iot = None
def OneNET_setup():global _iot_iot = MQTTClient("595250725", "183.230.40.39", 6002, "221628", "hiN7Cwz4Gd7d3ReMnNgtaEKBvv4=", keepalive=300)_iot.set_callback(OneNET_callback)if 1 == _iot.connect(): print('Successfully connected to MQTT server.')tim14.init(period=200, mode=Timer.PERIODIC, callback=timer14_tick)def OneNET_recv(_msg):try:_msgObj = ujson.loads(_msg)_name = _msgObj.get('name')_value = _msgObj.get('value')except: returnif _name == "输入":print(_value)music.play('B3:1')rgb[1] = (int(51), int(102), int(255))rgb.write()time.sleep_ms(1)oled.fill(0)oled.DispChar(_value, 0, 23, 1)oled.show()if _name == "R":print(_value)rgb.fill( (int(_value), int((_value + 20)), int((_value - 20))) )rgb.write()time.sleep_ms(1)if _name == "G":print(_value)rgb.fill( (int((_value + 20)), int(_value), int((_value - 20))) )rgb.write()time.sleep_ms(1)if _name == "B":print(_value)rgb.fill( (int((_value - 20)), int((_value + 20)), int(_value)) )rgb.write()time.sleep_ms(1)rgb[1] = (int(0), int(102), int(0))
rgb.write()
time.sleep_ms(1)
music.play('G4:1')
OneNET_setup()

mPython X 实验图形编程

8、实时监控光线值和声音值
GX与SY 小程序控制组件面板

#MicroPython动手做(27)——物联网之微信小程序
#实时监控光线值和声音值
#MicroPython动手做(27)——物联网之微信小程序
#实时监控光线值和声音值from mpython import *
import network
import time
import music
from umqtt.simple import MQTTClient
from machine import Timer
import machine
import ubinascii
import jsonmy_wifi = wifi()my_wifi.connectWiFi("zh", "zy1567")def OneNET_recv(_msg):pass
_OneNET_msg_list = []
def OneNET_callback(_topic, _msg):global _OneNET_msg_listtry: _msg = _msg.decode('utf-8', 'ignore')except: print(_msg);returnOneNET_recv(_msg)if _msg in _OneNET_msg_list:eval('OneNET_recv_' + bytes.decode(ubinascii.hexlify(_msg)) + '()')tim14 = Timer(14)_iot_count = 0
def timer14_tick(_):global _iot, _iot_count_iot_count = _iot_count + 1if _iot_count == 1000: _iot.ping(); _iot_count = 0try: _iot.check_msg()except: machine.reset()_iot = None
def OneNET_setup():global _iot_iot = MQTTClient("595250725", "183.230.40.39", 6002, "221628", "hiN7Cwz4Gd7d3ReMnNgtaEKBvv4=", keepalive=300)_iot.set_callback(OneNET_callback)if 1 == _iot.connect(): print('Successfully connected to MQTT server.')tim14.init(period=200, mode=Timer.PERIODIC, callback=timer14_tick)def pubdata(_dic):print(_dic)_list = []for _key in list(_dic.keys()):_d = {'id':_key,'datapoints':[{'value':_dic[_key]}]}_list.append(_d)_data = {'datastreams': _list}j_d = json.dumps(_data)j_l = len(j_d)arr = bytearray(j_l + 3)arr[0] = 1arr[1] = int(j_l / 256)arr[2] = j_l % 256arr[3:] = j_d.encode('ascii')return arrrgb[1] = (int(0), int(102), int(0))
rgb.write()
time.sleep_ms(1)
music.play('G4:1')
OneNET_setup()
while True:_iot.publish('$dp', pubdata({"xx":light.read()}))_iot.publish('$dp', pubdata({"yy":sound.read()}))time.sleep(1)
mPython X 实验图形编程

小程序上实时监控光线值和声音值

9、通过小程序控制小车进、退、左和右
调整好的小程序控制组件面板

#MicroPython动手做(27)——物联网之微信小程序
#通过小程序控制小车进、退、左和右
#MicroPython动手做(27)——物联网之微信小程序
#通过小程序控制小车进、退、左和右from mpython import *import networkmy_wifi = wifi()my_wifi.connectWiFi('zh', 'zy1567')import timeimport musicfrom umqtt.simple import MQTTClientfrom machine import Timerimport machineimport ubinasciidef OneNET_recv(_msg):pass
_OneNET_msg_list = []
def OneNET_callback(_topic, _msg):global _OneNET_msg_listtry: _msg = _msg.decode('utf-8', 'ignore')except: print(_msg);returnOneNET_recv(_msg)if _msg in _OneNET_msg_list:eval('OneNET_recv_' + bytes.decode(ubinascii.hexlify(_msg)) + '()')tim14 = Timer(14)_iot_count = 0
def timer14_tick(_):global _iot, _iot_count_iot_count = _iot_count + 1if _iot_count == 1000: _iot.ping(); _iot_count = 0try: _iot.check_msg()except: machine.reset()_iot = None
def OneNET_setup():global _iot_iot = MQTTClient('595250725', '183.230.40.39', 6002, '221628', 'hiN7Cwz4Gd7d3ReMnNgtaEKBvv4=', keepalive=300)_iot.set_callback(OneNET_callback)if 1 == _iot.connect(): print('Successfully connected to MQTT server.')tim14.init(period=200, mode=Timer.PERIODIC, callback=timer14_tick)import ujsonimport parrotdef forward():global _name, _valueparrot.set_speed(parrot.MOTOR_1, 80)parrot.set_speed(parrot.MOTOR_2, 80)oled.fill(0)oled.blit(image_picture.load('face/Information/Forward.pbm', 0), 32, 0)oled.show()def retreat():global _name, _valueparrot.set_speed(parrot.MOTOR_1, -80)parrot.set_speed(parrot.MOTOR_2, -80)oled.fill(0)oled.blit(image_picture.load('face/Information/Backward.pbm', 0), 32, 0)oled.show()def right():global _name, _valueparrot.set_speed(parrot.MOTOR_1, 80)parrot.set_speed(parrot.MOTOR_2, -0)oled.fill(0)oled.blit(image_picture.load('face/Information/Right.pbm', 0), 32, 0)oled.show()def Left():global _name, _valueparrot.set_speed(parrot.MOTOR_1, -0)parrot.set_speed(parrot.MOTOR_2, 80)oled.fill(0)oled.blit(image_picture.load('face/Information/Left.pbm', 0), 32, 0)oled.show()def OneNET_recv(_msg):try:_msgObj = ujson.loads(_msg)_name = _msgObj.get('name')_value = _msgObj.get('value')except: returnif _name == '进':print(_value)rgb.fill((int(0), int(102), int(0)))rgb.write()time.sleep_ms(1)forward()if _name == '退':print(_value)rgb.fill((int(51), int(51), int(255)))rgb.write()time.sleep_ms(1)retreat()if _name == '左':print(_value)rgb[0] = (int(0), int(102), int(0))rgb.write()time.sleep_ms(1)Left()if _name == '右':print(_value)rgb[2] = (int(0), int(102), int(0))rgb.write()time.sleep_ms(1)right()time.sleep(3)parrot.set_speed(parrot.MOTOR_1, 0)parrot.set_speed(parrot.MOTOR_2, 0)rgb.fill( (0, 0, 0) )rgb.write()time.sleep_ms(1)image_picture = Image()
rgb[1] = (int(102), int(0), int(0))
rgb.write()
time.sleep_ms(1)
music.play('G5:1')
OneNET_setup()
后来改为延时3秒关闭电机,小程序组件面板为

mPython 实验图形编程

MicroPython动手做(27)——物联网之微信小程序
通过小程序控制小车进、退、左和右(实验视频)
https://v.youku.com/v_show/id_XNDcwMDE3NTUwOA==.html?spm=a2h0c.8166622.PhoneSokuUgc_1.dtitle

相关文章:
【雕爷学编程】MicroPython动手做(27)——物联网之掌控板小程序3
知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…...
Java中集合容器详解:简单使用与案例分析
目录 一、概览 1.1 Collection 1. Set 2. List 3. Queue 1.2 Map 二、容器中的设计模式 迭代器模式 适配器模式 三、源码分析 ArrayList 1. 概览 2. 扩容 3. 删除元素 4. 序列化 5. Fail-Fast Vector 1. 同步 2. 扩容 3. 与 ArrayList 的比较 4. 替代方案…...
机器学习04-数据理解之数据可视化-(基于Pima数据集)
什么是数据可视化? 数据可视化是指通过图表、图形、地图等视觉元素将数据呈现出来的过程。它是将抽象的、复杂的数据转化为直观、易于理解的视觉表达的一种方法。数据可视化的目的是帮助人们更好地理解数据,从中发现模式、趋势、关联和异常,从而作出更明…...
百度@全球开发者,见证中国科技超级“碗”!
潮汐涌动时,变化悄然发生。2023年全球AI浪潮迭起,大语言模型热度空前,生成式人工智能为千行百业高质量发展带来更多想象空间,一个蓬勃创新、重构万物的“大模型时代”正蓄势待发。 滴滴滴~百度全球开发者,…...
分库分表之基于Shardingjdbc+docker+mysql主从架构实现读写分离(一)
说明:请先自行安装好docker再来看本篇文章,本篇文章主要实现通过使用docker部署mysql实现读写分离,并连接数据库测试。第二篇将实现使用Shardingjdbc实现springboot的读写分离实现。 基于Docker去创建Mysql的主从架构 #创建主从数据库文件夹…...
Ajax跨域问题
什么是跨域问题? 跨域问题来源于JavaScript的"同源策略",即只有 协议主机名端口号 (如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的&…...
Vue + FormData + axios实现图片上传功能
当使用Vue FormData axios实现图片上传功能时,你可以按照以下步骤进行操作: 示例代码 首先,在Vue组件中,创建一个data属性来存储选择的文件和上传状态: data() {return {file: null,uploading: false}; }在模板中…...
设计模式系列:经典的单例模式
单例模式,是设计模式当中非常重要的一种,在面试中也常常被考察到。 正文如下: 一、什么时候使用单例模式? 单例模式可谓是23种设计模式中最简单、最常见的设计模式了,它可以保证一个类只有一个实例。我们平时网购时用的购物车,就是单例模式的一个例子。想一想,如果购物…...
macbook pro 散热解决办法
结论: 2017 macbook pro 13.3 寸 控制住温度, 不惧长时间满载、性能也飞起. 方案说明最低温度满载温度一、终极方案(成本 460元)120w半导体散热 导热垫31度71度二、推荐方案, 完全静音(成本 50元)828散热风扇 导热垫43度81度三、不拆机、低成本(20元)828散热风扇56度91度四、…...
高并发与性能优化的神奇之旅
作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得感谢这段苦,让笔者从头到尾去探索,找寻解决之法。 目录 第一站&…...
Django Rest_Framework(一)
1. Web应用模式 在开发Web应用中,有两种应用模式: 前后端不分离[客户端看到的内容和所有界面效果都是由服务端提供出来的。] 前后端分离【把前端的界面效果(html,css,js分离到另一个服务端或另一个目录下,python服务…...
VB+ACCESS智能公交考勤系统管理软件设计与实现
智能公交考勤系统管理软件设计 摘要:随着现代科学技术的发展,越来越多的企业对职工的考勤管理都实行了信息化管理,使用计算机系统代替繁琐冗余的手工方式来管理考勤事务。针对公交考勤的系统管理、人事管理、运营管理,提出了智能公交考勤管理系统。 智能公交考勤系统是典…...
企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图 tbms
 项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&am…...
【ES】笔记-ECMAScript 相关介绍
ECMASript 相关介绍 什么是ECMA ECMA(European Computer Manufacturers Association)中文名称为欧洲计算机制 造商协会,这个组织的目标是评估、开发和认可电信和计算机标准。1994 年后该 组织改名为 Ecma 国际。 什么是 ECMAScript ECMAS…...
FFmpeg下载安装及Windows开发环境设置
1 FFmpeg简介 FFmpeg:FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。项目的名称来自MPEG视频编码标准,前面的"FF"代表…...
transformer面试常考题
1.位置编码有哪些?有什么区别? nn.embedding和正余弦编码两种用的多。nn.embedding是一种基于学习的嵌入方法, 通过神经网络的训练过程, 会自动学习数据中每个符号的嵌入向量表示。 而正余弦编码是一种手工设计的嵌入方式&…...
aws的EC2云服务器
亚马逊官网有免费试用1年的服务器 1. 启动生成实例 1.1 创建实例时需要生成 使用的默认的 Amazon Linux 和 一个.pem后缀的秘钥 1.2 网上下一个Mobaxterm ,实例名是公有 IPv4 DNS 地址 ,使用SSH连接,登录名是ec2-user...
hive函数大全
在hive内部有许多函数,如下: 内置运算符 关系运算符 算术运算符 逻辑运算符 复杂类型函数 内置函数内置聚合函数 数学函数 收集函数 类型转换函数 日期函数 条件函数 字符函数 内置聚合函数 内置表生成函数 1.1关系运算符 等值比较: 等值比较:<>…...
k8s概念-StatefulSet
StatefulSet 是用来管理有状态应用的控制器 StatefulSet 用来管理某Pod集合的部署和扩缩, 并为这些 Pod 提供持久存储和持久标识符StatefulSet | KubernetesStatefulSet 运行一组 Pod,并为每个 Pod 保留一个稳定的标识。 这可用于管理需要持久化存储或稳…...
HTMLCollection 和 NodeList 的详解,以及两者在开发情况下差异。
看结果直接看下文的举例子 HTMLCollection HTMLCollection 表示一个包含了元素(元素顺序为文档流中的接口)的集合(通用集合),还提供了从该集合中选择元素的属性和方法。 HTMLCollection 对象中的属性和方法: item(index) —— 返回 HTMLCollection 中指…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
如何做好一份技术文档?从规划到实践的完整指南
如何做好一份技术文档?从规划到实践的完整指南 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...
C#最佳实践:为何优先使用as或is而非强制转换
C#最佳实践:为何优先使用as或is而非强制转换 在 C# 的编程世界里,类型转换是我们经常会遇到的操作。就像在现实生活中,我们可能需要把不同形状的物品重新整理归类一样,在代码里,我们也常常需要将一个数据类型转换为另…...
