ESP8266制作WiFi插座

news/2024/10/11 5:27:26/

之前写过一个WiFi插座的制作方法,用的是Node的固件,然后是Lua来写的应用,稳定性也还可以,但就是开发不是很通用,Lua用起来也不顺手,开发环境也比较差,其实还有另一个比较好用的开发语言,那就是Python。对于Linux来说,Python不要太好用,对ESP8266来说,跑Python不现实,但有一个特别用于嵌入式的MicroPython就比较合适,既可以保留Python的编程习惯,又可以很好地使用并控制单片机,说到这里,就拿这个东西来做一个WiFi插座吧。

这里主要讲一下原理和代码,对于实物我就不进行制作了,其实就是加一个继电器的事,我们就定义GPIO2和GPIO4是两个继电器的驱动信号源,如果出高电平就代表打开继电器,如果出低电平就代表关闭继电器。平台还是使用贝壳物联的。

第一步是下载MicroPython的固件,传送门,可以根据自己Flash的大小选择合适的固件

下载完之后,还需要到乐鑫官网下载烧录工具,传送门,固件的烧录方法参考我之前的帖子传送门,如果之前有固件的话,烧录前必须执行一次整片擦除操作,否则有可能固件不能正常启动。

下面我们就要进行Micropython的编程阶段了,编程工具多种多样,可以使用记事本来写,也可以使用VIM来写,当然,也可以使用Pycharm,我们写的程序比较小,推荐使用notepad++来写就可以了,代码如下

import machine
import esp
import time
from machine import ADC
from machine import Pin
from machine import Timer
import esp
import network
import socket
import ujsonp0 = Pin(2,Pin.OUT)
p1 = Pin(4,Pin.OUT)s = socket.socket()machine.freq(80000000)
print(machine.freq())cnt = 1
cnt_heart = 1def System_restart():print('Restart System...')machine.reset()def Heart_Bit(s):try:s.send(heart_bit)except:print("Heart Beat Err")def Start_socket():list = ""addr = ('121.42.180.30',8181)#贝壳物联的IP地址和商品号command = b'{"M":"checkin","ID":"xxx1","K":"xxx2"}\n'#xxx1改成自己的ID号,xxx2改成自己的API Keyheart_bit = b'{"M":"b"}\n'device_status = b'{"M":"status"}\n's.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)s.connect(addr)s.settimeout(1)#socket超时时间设置1秒,使所有命令的响应时间尽量不超过1秒global cnt , cnt_hearttime.sleep_ms(500)str = s.recv(100)print(str)de_com = ujson.loads(str)cmd = de_com['M']if cmd != 'WELCOME TO BIGIOT':System_restart()time.sleep(3)try:s.send(command)time.sleep(2)str = s.recv(100)print(str)de_com = ujson.loads(str)cmd = de_com['M']if cmd != 'checkinok':System_restart()except:machine.reset()tm = Timer(-1)def func(t):global cnt , cnt_heartprint(cnt)print(cnt_heart)cnt=1024cnt_heart +=1024tm.init(period = 12000 , mode = Timer.PERIODIC , callback=func)while True:try:time.sleep(0.2)comm = s.recv(100)de_com = ujson.loads(comm)if (de_com['M']=='say') and (de_com['ID']=='xxxx') and (de_com['NAME']=='xxxxxxx'):#同理修改两个XXX字符串,如果不知道怎么改,可以把后面两个判断条件删掉,也可以使用cmd = de_com['C']print(cmd)if cmd == 'up':p0.on()elif cmd == 'down':p0.off()elif cmd == 'right':p1.on()elif cmd == 'left':p1.off()cnt +=1except:if cnt>=1024:cnt = 0try:s.send(device_status)time.sleep(0.2)str = s.recv(100)print(str)de_com = ujson.loads(str)cmd = de_com['M']if (cmd != 'checked') and (cmd != 'say'):breakexcept:print("Data Err...")if cnt_heart>=3072:cnt_heart = 0try:print("call back 2 working...")s.send(heart_bit)except:print("Data Err...\r\n Reset System...")breaktime.sleep(0.2)def do_connect():wlan = network.WLAN(network.STA_IF)wlan.active(True)if not wlan.isconnected():print('connecting to network...')wlan.connect('SSID','password')while not wlan.isconnected():print('Try again')time.sleep_ms(500)passprint('network config:',wlan.ifconfig())while True:p0.on()p1.off()time.sleep(0.1)p0.off()p1.on()time.sleep(0.1)print('Switch '+ str(cnt) +' times')cnt +=1do_connect()Start_socket()s.close()

把这个代码烧进ESP8266芯片内,(代码烧录的方法参考我另一个帖子,传送门)我们就可以把贝壳物联上控制我们的开发板做出相应的动作,上箭头是开继电器1,下箭头是关继电器1,右箭头是开继电器2,左箭头是关继电器2


http://www.ppmy.cn/news/230175.html

相关文章

ad软件中的插座_从此告别插口不够的窘迫 大牌电源插座价格限时爆降

点击左下角 “阅读原文” 查看购买链接 金盒特价!精选 Belkin 家用/办公用电源插座大促销!亚马逊Prime会员或本次购物总额满$25免运费! Belkin 12插口电源插座,带浪涌保护,原价 $24.99,现仅售 $14.39。 Bel…

自建小米插座服务器,如何造出39元的智能插座?——小米智能插座拆解

前些天雷科技做了一期小米智能插座的详细评测《便宜有好货 - 小米智能插座评测》,看到有网友在留言中表示质疑产品的内部构造情况,甚至有网友将智能插座和普通插座混为一谈。今天,雷科技小编彻底拆解了小米智能插座,进一步为大家展现小米智能插座的内部结构和一些实测数据,…

rj45插座尺寸图_rj45插座组成部分及使用说明

rj45插座多数都是应用在一些电子仪器设备的使用,而且rj45插座大家又广泛的叫做rj45连接器,其使用上需要和rj45插头与rj45插座配置使用的。那么大家对于rj45插座是否有具体的认识及了解呢?如rj45插座的组成部分有哪些呢?以及日常使用当中需要注意哪些细节要点等等呢。猜想你…

rj45插座尺寸图_RJ45网络插座的基本知识

RJ45的定义 RJ45是一种网络插座,通常用于数据传输,接头的线有直通线、交叉线两种。最常见的应用为网卡接口。是一种网卡上用的标准接口,用来插网线的。各种不同接头的一种类型(例如:RJ11也是接头的一种类型,不过它是电…

自建小米插座服务器,暴力拆解小米智能插座并修复

这个插座我可是用了有两年了,每天都在使用,USB口连接着卧室的摄像头,因为有宝宝,所以睡觉随时需要看着,这样开关比较方便,220V的插座接口用来充手机,定时关闭充电器可以避免过充。。 1.PNG (77.94 KB, 下载次数: 17) 2017-2-6 18:32 上传 中午儿子睡觉了,又像往常一样准…

计算机插座符号,插座图形符号

插座图形符号: 一些图形形状符号前缀~~(>_<)~~~~、feel ㄨ、XXX&#xff0c;缺失&#xff1a;插座图形符号13398/9 以下是的一些我们精选的一些图形形状符号前缀~~(>_<)~~~~、feel ㄨ、XXX ╭┄Dear、 ╰つ ℡﹏〆 on1y丶 strange 灬 ℡(陌生人) ▲︶ ░ ⌒⌒ xx …

Clonezilla-初识

Clonezilla的介绍 Clonezilla 是一个系统克隆工具&#xff0c;中文名又叫再生龙&#xff0c;它可以说是吸取了 Norton Ghost 和 Partition Image 的优点。即不仅支持对整个系统进行克隆&#xff0c;而且也可以克隆单个的分区&#xff0c;这种灵活性可能更能适应备份者的需要 。…

Springboot自定义starter

文章目录 前言1.引入依赖1.1 json的转换1.2 xml转换依赖 2.定义Formate核心转化接口3.实现核心接口json和xml的转换3.1 json转换的实现3.2 xml转换的实现 4. FormatProperties类5.FormatAutoConfiguration 类配置6.提供一个MyFormatTemplate 模板类7.注册到springboot8.创建spr…