ESP8266制作WiFi插座

编程入门 行业动态 更新时间:2024-10-24 12:22:03

ESP8266制作WiFi<a href=https://www.elefans.com/category/jswz/34/1766127.html style=插座"/>

ESP8266制作WiFi插座

之前写过一个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

更多推荐

ESP8266制作WiFi插座

本文发布于:2024-02-27 05:56:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1705437.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:插座   WiFi

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!