笔者有一个多年前在迪卡侬买的单车车灯:
因为纽扣电池已经没有电了,而且我不准备买新的纽扣电池。所以,就拆下来了。然后,我把它安装在了wemos D1 上面。
接下来,去 thonny.org/ 下载thonny IDE,去micropython.org/ 找到esp8266的micropython固件,并使用thonny进行烧录。
之后,我使用d7针脚(gpio13)作为按钮触发。
btn = Pin(13, Pin.OUT) #d7
为了从小程序调用,因此需要开启一个web服务。首先自然是要做一个AP热点:
import network
ssid = 'led'
password = 'codetyphon'
ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid=ssid, password=password)
while ap.active() == False:
pass
然后,建立一个服务器:
try:
import usocket as socket
except:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)
之后,设置http://192.168.4.1/next 为触发:
conn, addr = s.accept()
request = conn.recv(1024)
request = str(request)
btn_click = request.find('/next')
if btn_click == 6:
btn.on()
sleep(1)
btn.off()
为什么要有一个sleep(1)呢?是因为,那个前灯本来是手动按的,它按的时候是有一定的触碰时间的。因此,即便用d7针脚去模拟触碰,也要有一个时间。
关键代码就都讲完了,下面是micropython的全部代码:
try:
import usocket as socket
except:
import socket
from machine import Pin
import network
from time import sleep
import gc
gc.collect()
ssid = 'led'
password = 'codetyphon'
ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid=ssid, password=password)
while ap.active() == False:
pass
print('Connection successful')
print(ap.ifconfig())
btn = Pin(13, Pin.OUT) #d7
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)
while True:
try:
if gc.mem_free() < 102000:
gc.collect()
conn, addr = s.accept()
conn.settimeout(3.0)
request = conn.recv(1024)
conn.settimeout(None)
request = str(request)
print('Content = %s' % request)
btn_click = request.find('/next')
if btn_click == 6:
btn.on()
sleep(1)
btn.off()
conn.send('ok')
conn.close()
except OSError as e:
conn.close()
接下来,开发小程序。关键代码很简单,其实就是一句话,调用192.168.4.1(micropython写的web)服务而已。
async up() {
const res = await app.wx.request({
url: `http://192.168.4.1/next`
})
},
最后,效果如下:
参考: 1、randomnerdtutorials.com/micropython… 2、randomnerdtutorials.com/micropython…