一提到智能家庭,大家可能首先想到的是各种大佬级公司搞的牛逼产品,或者说是创新产品。想想就觉得很复杂,有的用工控机,有的用树莓派,还有的用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 硬件的搭建与连接

发光二极管的使用

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

直流小电机的使用方法

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

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

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

我的实物连接图

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 Pin

led_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():

pass

if 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_data

while 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()

continue

else:

if len(req_data)<=12:

#说明是第一次访问,输入login.html

s_data=login_data

else:

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_data

print('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_data

led_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_data

motor_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 登录页面:

智能家庭网络

h2

{

margin-top:4%;

margin-bottom:40px;

}

欢迎登录智能家庭网络平台

用户名或密码错误!

用户名:

密 码:

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,这样就可以从外网进行访问,从而完成外网对家内设备的控制。

转载于:

http://docs.tpyboard.com/zh/latest/tpyboard/tutorial/v202/V2023/

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

  1. 利用单片机快速实现家庭智能控制平台

    2019独角兽企业重金招聘Python工程师标准>>> 0x00 前言 一提到智能家庭,大家可能首先想到的是各种大佬级公司搞的牛逼产品,或者说是创新产品.想想就觉得很复杂,有的用工控 ...

  2. python做工控机_狼真的来了吗?igus用树莓派工控机打造了一条智能拖链

    何为"树莓派"? Raspberry Pi(中文名为"树莓派",简写为RPi),是为学习计算机编程教育而设计,只有信用卡大小基于ARM处理器的微型电脑,操作系统 ...

  3. python做工控机_「上位机软件」工控机上位机软件的开发历程(一) - seo实验室...

    上位机软件 本人就职于一家环境监测公司,上位机软件的主要功能是采集各仪器的数据,然后存储起来,并传送到环保局平台. 刚到公司的时候,公司使用的是组态软件(用以显示流程图),然后再开发了报表软件.数据上 ...

  4. python做工控机_工控机折腾小记

    引言 之前笔记本换下来的一块1T的2.5硬盘; 本来想着买个树莓派挂硬盘做个简单的 NAS, 鉴于性能问题, 后来某鱼入手了一个搭载赛扬 N2940 CPU 的工控机; 基本配置: Intel Cel ...

  5. [Micropython]TPYBoard v202 邪恶改装:TPYBoard制作廉价WIFI干扰器

    2019独角兽企业重金招聘Python工程师标准>>> 想不想搞个WIFI干扰器?网上搜集了一下资料,发现用esp8266可以实现简单的干扰功能,包括断网.复制.欺骗等等.刚好手上有 ...

  6. python做交易软件_我用Python做了个量化交易工具!

    量化交易是指借助现代统计学和数学的方法,利用计算机技术进行投资交易的方式. 对于从未接触过量化的人来说,想要了解量化到底是做什么的,关键掌握四部份的内容:Python基础知识.金融知识.技术指标.量化 ...

  7. python做统计分析_用Python做数据分析,Numpy,Pandas,matp

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 用Python做数据分析,Numpy,Pandas,matplotlib是怎么也绕不开的三个包,我最开始学习pandas是看的<利用Python进行 ...

  8. python 做网页_女生30岁以前,怎么早做打算

    庆哥 爱美水瓶座玩转广式煲汤养生干货总结癖有位网友说,她人生焦虑值达到巅峰是29岁那一年.即将步入30岁大军,已婚未育,工作7年,工资和入职时差不了多少,想跳槽又尴尬.在职场里,30岁,是不是女人的大 ...

  9. python做日历牌_中秋节到了,送你一个Python做的Crossin牌“月饼”

    明天是难得一见的国庆中秋双节合一,在这里除了祝大家节日快乐之外,我们还要送上一个"月饼"--当然这个月饼是不能吃的,因为它是用python做的.先给大家看一下效果图. 图1. 月饼 ...

最新文章

  1. Cookie,Session
  2. 净化网络环境!可信数字内容版权服务解决方案发布
  3. 无表头单链表的总结----输出链表
  4. Oracle取同一类别中某属性最大或者最小值的一条
  5. Oracle的tnsnames.ora配置(PLSQL Developer)
  6. Windows7无法访问(远程登录)Windows 2003共享问题解决
  7. 推荐几个手机网站在线预览测试工具
  8. Hadoop学习系列(一)
  9. matlab 矩阵维度一致,错误使用 / 矩阵维度必须一致。
  10. DataSource接口 Connection pooling(连接池
  11. Python正则表达式(一看就懂)
  12. python遍历列表中所有元素_python如何遍历列表所有元素?
  13. Writeup for 0CTF2017 web
  14. Halcon 算子 Orientation_region
  15. 埃及分数c 语言程序,C语言将真分数分解为埃及分数
  16. H5组件Canvas画电子印章
  17. Python正则表达式-re模块奇技淫巧
  18. 学会这些句子,你还愁英语单词吗
  19. python 在线教程-python教程在线
  20. python QQ邮件发送

热门文章

  1. 天融信防火墙web配置_常见web系统默认口令总结
  2. python夯实基础日记-字典、集合、分支、循环
  3. 中科红旗桌面操作系统V11无法自动更新解决办法
  4. json中的loads和dumps的区别及用法
  5. 绿联扩展坞拆解_拆解报告:UGREEN 绿联 3A1C 四口多功能扩展坞(带 SD 卡槽版)...
  6. 小程序毕设作品之微信积分商城小程序毕业设计成品(4)开题报告
  7. DSP的GEL文件详解
  8. 2019牛客暑期多校训练营(第一场)(B、C、E、F、H、I题待补、J)
  9. Android 破解APK
  10. k8s二进制安装-3,配置ca证书