使用小程序控制用esp8266改装的迪卡侬便携自行车前灯

1,766 阅读1分钟

笔者有一个多年前在迪卡侬买的单车车灯:

因为纽扣电池已经没有电了,而且我不准备买新的纽扣电池。所以,就拆下来了。然后,我把它安装在了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…