ESP01S+k210+小爱同学 实现控制简单设备 Python实现

实现原理

        实现原理很简单,使用k210与ESP01S进行串口通信,用串口的形式给ESP01S发送命令即可。ESP01S连接到有网络的wifi之后,该命令通过TCP发送到巴法云https://cloud.bemfa.com/。在巴法云创建账号,创建好主题

由右上角新建主题,即新建设备,如图设备命名为com002是一个灯,com003是一个风扇,com002的控制方式是打开/关闭,调节亮度/颜色。xxx00x后缀指定不一样的设备,具体可以看接入文档。

建议使用qq邮箱进行登录,登录之后可以在米家进行添加,选择连接其他平台

搜索巴法

点击即可完成设备共享,完全免费,如有同步,点击同步,则可以在米家看到同步的设备

测试ESP01S 

安信可串口调试助手

链接:https://pan.baidu.com/s/1WPN9GlnDxnBB4qFTr-A7tQ?pwd=Coco 
提取码:Coco 

电脑端事先调试ESP01S测试通信,使用安信可串口调试助手调试ESP01S,需要用到USB to TTL

或者CH340串口下载器一个

将ESP01S连接上CH340 打开安信可串口调试助手

发送  AT   返回  OK即串口连接ESP01S成功

寻找到一个可用的wifi依次使用串口发送指令设置链接wifi

AT+CWMODE=1    设置AP模式

AT+CWJAP_DEF="MLS5434","A12345678"   设置WiFi名称和密码替换成你的

返回wifi连接成功,并且获取到了IP

AT+CIPSTART="TCP","bemfa.com",8344    使用TCP链接巴法云bemfa.com  端口8344

返回CONNECT链接成功

AT+CIPSEND=57       设置使用ESP01S发送57个字节内容

出现OK后再次将内容粘贴在输入框点击发送,即可通过ESP01S发送到巴法云控制台

内容如下

cmd=1&uid=63eaf70b147a44XXXXXXXXXXXXXXXX&topic=com002

发送成功后返回cmd=1&res=1说明订阅/上线成功,如果发送失败则再次点击TCP连接巴法云,没有发送心跳超过65秒设备会被认为不在线。

将UID部分替换成你在巴法云注册的账号私匙 com002替换成你创建的主题名称/设备名称,点击发送,即可看到巴法云上的主题被订阅/上线。

如图,上线成功。即可通过小爱同学控制数值,数值改变后将会广播到订阅/上线巴法云的设备上,即可通过串口下发到k210

k210 串口和ESP01S通信

使用k210串口和ESP01S通信,通过串口发送以上的指令到ESP01S,实现接收巴法云上的设备信息来控制一个LED灯的亮灭和亮度调节

使用k210的板载口 6,7 作为和ESP01S的串口传输

使用34号口用来输出PWM点亮LED灯和调节亮度

留有风扇PWM输出口35目前测试一块ESP01S只能接受一个主题/设备 控制 想要的拓展可以使用 两个串口拓展。

附上测试小视频

链接:https://pan.baidu.com/s/1dSNw5sOIg6hDNTgVjKyWQg?pwd=Coco 
提取码:Coco 
 

代码如下

from Maix import GPIO
from fpioa_manager import fm
from machine import Timer,PWM,UART
#led 和 风扇定义
tim1 = Timer(Timer.TIMER0, Timer.CHANNEL1, mode=Timer.MODE_PWM)
led=PWM(tim1, freq=100, duty=50, pin=34)
led.duty(0)
tim2 =Timer(Timer.TIMER0, Timer.CHANNEL2, mode=Timer.MODE_PWM)
fe=PWM(tim2, freq=100, duty=50, pin=35)
fe.duty(0)

#无线串口定义
fm.register(7, fm.fpioa.UART1_RX, force=True)
fm.register(6, fm.fpioa.UART1_TX, force=True)
uart = UART(UART.UART1, baudrate=115200,bits=8,parity=None,stop=1,timeout=2000, read_buf_len=1024)
data2=''
t0=0
UID='63eaf70b147a44xxxxxxxxxxxxxxxxx'   #UID 你的私匙
wifiname='MLS5434'         #wifi名称
wifipassword='A12345678'   #wifi密码
com='com002'              #设备号建议使用com002   如更改其他的需要修改代码91  96行发送  和106 107  115行接收


def  ping0(tim):   #心跳
    global t0
    t0+=1
    if t0%30==1:
        fa('AT+CIPSEND=5\r\n')
        fa('ping\r\n')

def strdel(data):   #接收数据清洗
    if type(data)==type(''):
        s=''
        a=0  #s+= 控制
        for i in data:
            a+=1
            if i=='\\':
                a=-1
                continue
            if a:
                s+=i
            else:
                s+=' '
        return s
    else:print('不是字符串')

def fa(data):
    uart.write(data)
def shou():
    global data2,i
    data2=uart.read() #读取数据
    if data2:
        print('i=',i,'接收到:',end=' ')
        data2=strdel(str(data2)[2:-1])
        if 'ping' in data2 and 'OK' in data2:
            print('心跳+1')
        else:
            print(data2)
    time.sleep(0.2)
def l():#流程检测
    global data2,i
    if data2!='' and data2 != None:
        if 'PSEND=5' in data2 and i<5:                   i=5
        if 'AT ' in data2 and 'OK' in data2:             i=1
        if 'AT+CWMODE=1 ' in data2 and 'OK' in data2:    i=2
        if 'WIFI GOT IP' in data2 :                      i=3
        if 'ERROR' in data2:                             i=2
        #i= 3 接收到: AT+CIPSEND=5   ping   busy p...  link is not valid    ERROR
        if 'CONNECT ' in data2 and  'OK' in data2:      i=4
        if 'CLOSED' in data2:
            print('设备下线')
            i=0
        if 'cmd=1&res=1' in data2:
            i=6
            print('设备上线')
def mw(): #控制esp发送指令
    global data2,i,j
    if data2:
        if i==0:
            fa('AT\r\n')
        if i==1:
            fa('AT+CWMODE=1\r\n')
        if i==2:
            fa('AT+CWJAP_DEF="'+wifiname+'","'+wifipassword+'"\r\n')   #WIFi 连接
        if i==3:
            fa('AT+CIPSTART="TCP","bemfa.com",8344\r\n')
        if i==4:
            fa('AT+CIPSEND=57\r\n')
            time.sleep(0.1)
            fa('cmd=1&uid='+UID+'&topic='+com+'\r\n')   #密匙

        if i==5:
            fa('AT+CIPSEND=57\r\n')
            time.sleep(0.1)
            fa('cmd=1&uid='+UID+'&topic='+com+'\r\n')
        if i==6:

            tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PERIODIC, period=1000, callback=ping0)
        j.append(i)
def runGPIO():
    global data2,i
    if data2:
        if i==6:                                   #
        #cmd=2&uid=63eaf70Xxxxxxxxxxxxxxxxxxxxxxxxx&topic=com002&msg=on#11#813   开关/亮度/颜色
            if com in data2:
                if com+'&msg=on' in data2:
                    li=50
                    print('开灯')
                    if 'msg=on#' in data2:
                        li0=data2[data2.index('msg=on#')+7:]
                        if '#' in li0:li=eval(li0[:li0.index('#')])
                        else:li=eval(li0)
                    led.duty(li)
                    print(li)
                if com+'&msg=off' in data2:
                    print('关灯')
                    led.duty(0)
i=0  #流程控制
j=[] #记录
fa('AT+RST\r\n')
while 1:
    shou()
    l()
    mw()
    runGPIO()



  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清性

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值