2019独角兽企业重金招聘Python工程师标准>>>

0x00 前言

一提到智能家庭,大家可能首先想到的是各种大佬级公司搞的牛逼产品,或者说是创新产品。想想就觉得很复杂,有的用工控机,有的用树莓派,还有的用arduino,不管用什么,都绕不过服务器进行控制,比如yeelink平台,腾讯的智能硬件平台等等。其实,真实实现起来,并没有想想中这么复杂,我们甚至只用一个小的单片机就能实现。

0x01 单片机实现web服务器

探讨用单片机来实现web服务器的文章通过baidu也能找到几篇,但比较详实的实现方法并没有找到,这里考虑有两种思路可以完成,一种是有线的lan模块,如w5500,这种模块本身就带有web服务的部分功能,使用起来比较简单,但是只能基于lan进行访问。另一种是通过stm32等单片机,配合网络模块来完成。当前我能想到的最简单的方法就是用stm32+esp8266来实现。

基于第一种方法,我觉得受模块性能影响比较大,受限于模块,没有开发感。于是考虑用第二种方法。这个方法里,有人用arduino来完成,这要基于c进行编程。另外,就是考虑用micropython,这样直接可以用python来实现。这里依然使用tpyboard V202。

0x02 模拟实现家庭智能家居控制平台

因为没有想好要做一个多么复杂的实验,只是想能模拟一下效果,所有在整个的模块过程中,我选用了tpyboard v202开发板做主控制板,用一个发光二极管来模拟一个台灯(现实中,这里其实可以用一个继电器来控制其它设备的通断电),用一个直流小电机加迷你风扇叶表示模拟电风扇。整个实现还用到了一个三极管(S9014,NPN)来控制直流电机。

0x03 硬件的搭建与连接

1、发光二极管的使用

发光二极管使用比较简单,直接看它的两条“腿”,长的那个是正极,反之是负极。

2、直流小电机的使用方法

上图直流小电机中,红色框内的两个接线端A和B,无论那个接正极或负极都可以,只不过转动的方向不一样而已。本次我是用B端接入正极,正好是顺时针转动。

3、三极管S9014(NPN)的使用方法

本次我们使用S9014的放大和开关功能,集电极接入v202的3.3V引脚,发射极接入电机某一端,通过给基极高低电平来控制发射极和集电极之间是否导通,从而控制直流电机转动或停止。

下面来介绍一下接线方法

三极管(S9014)

TPYBoard v202

直流小电机

集电极

3.3V

--

基极

G5

--

发射极

--

B 端

--

GND

A端

TPYBoard v202

发光二极管

G4

正极

GND

负极

我的实物连接图

0x04 利用micropython实现web服务器

首先,编辑一个main.py文件。v202 开机自启动main.py 文件

try:import usocket as socket
except:import socket
import network
from machine import UART
from machine import Pinled_flag=Pin(2, Pin.OUT)#esp8266模块上的小灯 高电平:灭 低电平:亮
led = Pin(4, Pin.OUT)#发光二极管的控制引脚
motor = Pin(5, Pin.OUT)#直流电机的控制引脚
#初始化
led.low()
motor.low()
led_flag.high()
def do_connect(ssid,pwd):sta_if = network.WLAN(network.STA_IF)#STA 模式sta_if.active(False)if not sta_if.isconnected():#判断是否连接sta_if.active(True)sta_if.connect(ssid,pwd)#ssid:WIFI名称 pwd:WIFI 密码while not sta_if.isconnected():passif sta_if.isconnected():return sta_if.ifconfig()[0]
def main(ip_,dev_data,login_data,name,pwd):s = socket.socket()ai = socket.getaddrinfo(ip_, 80)addr = ai[0][-1]s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)s.bind(addr)s.listen(5)led_flag.low()#s_data=login_datawhile True:res = s.accept()client_s = res[0]client_addr = res[1]led_flag.high()req =client_s.readline()while True:h = client_s.readline()if h == b"" or h == b"\r\n":break#print(h)req+=(h.decode('utf-8').lower())print("Request:")req=req.decode('utf-8').lower().split('\r\n')#http header 解析req_data=req[0].lstrip().rstrip().replace(' ','')print(req_data)if req_data.find('favicon.ico')>-1:client_s.close()continueelse:if len(req_data)<=12:#说明是第一次访问,输入login.htmls_data=login_dataelse:req_data=req_data.replace('get/?','').replace('http/1.1','')_name=req_data.find('name')_pwd=req_data.find('pwd')if _name>-1 and _pwd>-1:#判断是否是用户登录if req_data.find(name)>-1 and req_data.find(pwd)>-1:s_data=dev_dataprint('Login Success!')else:f=open('fail.html','r')s_data=f.read()f.close()print('Login Fail!')else:#判断是否是控制LED_index=req_data.find('led=')if _index>-1:s_data=dev_dataled_val=req_data[_index+4:_index+6].lstrip().rstrip()print('led:',led_val)if led_val=='on':led.value(1)else:led.value(0)#判断是否是控制电机_index=req_data.find('motor=')if _index>-1:s_data=dev_datamotor_val=req_data[_index+6:_index+8].lstrip().rstrip()print('motor_val:',motor_val)if motor_val=='on':motor.value(1)else:motor.value(0)print('-----------')client_s.send(s_data)client_s.close()led_flag.low()f=open('device.html','r')
dev_html=f.read()
f.close()
f=open('login.html','r')
login_html=f.read()
f.close()
f=open('info.txt','r')
info=f.read()
f.close()
name=info.split(',')[0].lstrip().rstrip()
pwd=info.split(',')[1].lstrip().rstrip()
print('name:',name)
print('pwd:',pwd)
myip_=do_connect('essid','pwd')#家中网络的WIFI名称和密码
print(myip_)
main(myip_,dev_html,login_html,name,pwd)

login.html 登录页面

<html><head><title>智能家庭网络</title><meta name="viewport" content="width=device-width, initial-scale=1" /><style type="text/css">h2{margin-top:4%;margin-bottom:40px;}</style></head><body><center><h2>欢迎登录智能家庭网络平台</h2><form action="/" method="get" accept-charset="utf-8"><p>用户名:&nbsp;<input type="text" name="name"  /></p>  <p>密&nbsp;码:&nbsp;&nbsp;<input type="password" name="pwd"  /></p><input type="Submit" value="登录"  />         </form></center></body>
</html>

device.html 控制页面

<html><head><title>智能家庭网络平台</title><meta name="viewport" content="width=device-width, initial-scale=1" /><style type="text/css">h2{margin-top:4%;margin-bottom:40px;}</style></head><body><center><h2>欢迎使用智能家庭网络-控制平台</h2><form action="/" method="get" accept-charset="utf-8"><p>灯光:&nbsp;<input type="Submit" value="ON" name="led" />&nbsp;<input type="Submit" value="OFF" name="led" /></p>  <p>风扇:&nbsp;<input type="Submit" value="ON" name="motor" />&nbsp;<input type="Submit" value="OFF" name="motor" /></p>         </form></center></body>
</html>

fail.html 登录错误页面(就是把login.html 稍做了一下改动)

<html><head><title>智能家庭网络</title><meta name="viewport" content="width=device-width, initial-scale=1" /><style type="text/css">h2{margin-top:4%;margin-bottom:40px;}</style></head><body><center><h2>欢迎登录智能家庭网络平台</h2><form action="/" method="get" accept-charset="utf-8"><p style="color:red">用户名或密码错误!</p><p>用户名:&nbsp;<input type="text" name="name"  /></p>  <p>密&nbsp;码:&nbsp;&nbsp;<input type="password" name="pwd"  /></p><input type="Submit" value="登录"  />         </form></center></body>
</html>

info.txt 这里是用文件存放的用户名和密码(英文逗号分隔),前面是用户名,后面是密码。

这里的用户名和密码是用来登录我们 智能家居控制平台的。

admin,123456

0x05 程序下载测试

使用MicroPython File Uploader 工具,将源代码下载到v202中。

工具下载地址: http://tpyboard.com/download/tool/170.html

1、 使用usb数据线将v202接入到电脑,打开设备管理器,查看加载的端口。我的是COM44

※如果驱动安装失败,可以下载CH340的驱动,手动安装。

CH340驱动下载地址:http://tpyboard.com/download/drive/163.html

2、 打开MicroPython File Uploader 选择端口,点击[Open]。

3、 取消[Autorun]的打钩,点击红框的文件夹图标,选择源码,点击[Send]等待发送成功。

4、 将上面的源码文件都下载到v202中,下载完毕后,点击[Run/Reset]就会开始执行代码。

5、 开始运行后,红色框内打印的是我们存放在info.txt里的用户名和密码,这个可以自定义。

6、 下面桃红色框内打印的是我们v202从路由器那里获取到的IP地址,只要打印了IP地址,说明就成功接入网络了。我的v202获取的IP地址是192.168.1.192。

7、  到此,我们的web服务器就搭建完成了。

0x06 智能家庭网络平台的使用

1、在家庭局域网内,我们可以选用pc或者手机,通过浏览器,打开192.168.1.192 就可以看到登录界面。

2、默认用户名 admin 密码123456 ,大家可以通过修改info.txt 文件来进行修改。

(1)输入错误的用户名和密码会进入错误界面。

(2) 输入正确的,进入控制平台。

3、接下来,我们就可以通过网页开控制灯光和小风扇了,看我的实验效果图。

这里,我只是做了一个实例,受时间限制,没有再做更深入的开发。大家可以自己结合自己的创意再深入去做。如果能够通过路由器给tpyboard v202设一个外网Ip,这样就可以从外网进行访问,从而完成外网对家内设备的控制。

转载于:https://my.oschina.net/micropython/blog/1052853

利用单片机快速实现家庭智能控制平台相关推荐

  1. python做工控机_[Micropython]TPYBoard v202 利用单片机快速实现家庭智能控制平台

    一提到智能家庭,大家可能首先想到的是各种大佬级公司搞的牛逼产品,或者说是创新产品.想想就觉得很复杂,有的用工控机,有的用树莓派,还有的用arduino,不管用什么,都绕不过服务器进行控制,比如yeel ...

  2. 网鱼网咖-利用数加快速搭建大数据平台,极致洞察,为客户带来从所未有的体验。...

    免费开通大数据服务:https://www.aliyun.com/product/odps "令人惊喜的是,利用阿里云的数加平台,我们差不多一个多月就搭建好了大数据平台,并且可以通过图形化的 ...

  3. 网鱼网咖-利用数加快速搭建大数据平台,极致洞察,为客户带来从所未有的体验。

    免费开通大数据服务:https://www.aliyun.com/product/odps "令人惊喜的是,利用阿里云的数加平台,我们差不多一个多月就搭建好了大数据平台,并且可以通过图形化的 ...

  4. 一个快速实现彩屏应用的跨平台快速原型开发工具平台,最重要的是还免费!8ms.xyz平台原以为是单片机版墨刀,今天上去玩了才知道平台厉害的很,基于WEB端免搭建开发环境,跑的还是C代码编译出来的程序!

    哈哈哈哈,最近发现一个好用的在线编译.下载.烧录的跨平台快速原型开发工具平台,名字好记–8ms,单看名字是真的不知道干嘛的,不知道为啥叫这个?不多想了,好用就得分享给大家,独乐乐不如众乐乐呀-- 好用 ...

  5. 快速配置Windows 2003平台下实现 IIS(WEB)站点的安全(SSL加密技术!)

    [实验名称] 快速配置Windows 2003平台下实现 IIS(WEB)站点的安全(SSL加密技术!) [实验基本概念] A. 对于公用信息--------------------www.Sohu. ...

  6. springboot+mysql创意家庭装修平台-计算机毕业设计源码81002

    目  录 摘要 1 绪论 1.1研究意义 1.2开发背景 2 1.3JavaScript 运行模式 2 1.4系统开发技术的特色 3 1.5 springboot框架介绍 3 1.6论文结构与章节安排 ...

  7. 资源整合案例,老板们该如何利用闲置资源,整合打造平台!

    工厂+租房整合项目是利用闲置资源整合打造的平台,现在如今有各种租房平台,比如:赶集网蚂蚁短租.58租房.携程网.途牛网等等上百个平台,只不过他们是整合高端的小区.社区.酒店资源. 而我们这个工厂+租房 ...

  8. 【51单片机快速入门指南】4.5:I2C 与 TCA6416实现双向 IO 扩展

    目录 硬知识 IO 扩展芯片 TCA6416A TAC6416A 的寄存器 IO 输入寄存器 IO 输出寄存器 IO 反相寄存器 IO 方向寄存器 TCA6416A 的操作 TCA6416A 写数据 ...

  9. 【51单片机快速入门指南】4.3: I2C读取MPU6050陀螺仪的原始数据

    目录 硬知识 特性参数 MPU6050 简介 模块重要寄存器简介 电源管理寄存器 1 陀螺仪配置寄存器 加速度传感器配置寄存器 FIFO 使能寄存器 陀螺仪采样率分频寄存器 配置寄存器 电源管理寄存器 ...

最新文章

  1. arm-linux内核编译过程小结
  2. 无线传感网3-2.高效率目标物监控
  3. 什么是Starter
  4. 文件对比工具Beyond Compare的使用(入门)
  5. tensorflow(GPU)使用
  6. Nginx利用nginx_upstream_check_module检查后端健康情况
  7. Eclipse里面的快捷键
  8. Kali Linux之软件安装、卸载、更新和修改更新源
  9. 智能手机收邮件之Mobile
  10. win7不显示移动硬盘_win7系统电脑开机不显示桌面?
  11. python爬虫实践目的_Python编写爬虫实践
  12. 加密狗破解原理和破解方法介绍
  13. 华为多屏互动看学英语
  14. 博弈论 纳什均衡 囚徒困境 智猪博弈
  15. 网页弹窗插件layer.js的使用
  16. VR 中的常用指令设置及介绍
  17. 我有个朋友叫大路,他满世界“平事儿”不含糊
  18. 服务器托管是什么?服务器托管优势在哪里?
  19. 2021工作总结汇报PPT模板
  20. 依赖是什么及类的关系有那些

热门文章

  1. struts.xml配置文件中result的语法
  2. Visual C++ 2011-8-15
  3. 腾讯开放或将触发行业新一轮创业热潮
  4. cisco设备运维常用命令 总结-1
  5. greenplum error!
  6. grep, sed, awk
  7. [一个经典的多线程同步问题]解决方案三:互斥量Mutex
  8. JCo3 建立连接到SAP(2)- 连接池
  9. java中表示二进制、八进制、十进制、十六进制,double、float、整型
  10. [转载] 七龙珠第一部——第057话 小雨对布鲁