zoukankan      html  css  js  c++  java
  • [Micropython]TPYBoard v202 智能WIFI远控小车

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇

    前言
    ----------------------

    之前有过用TPYBoard v102制作的各种各样功能的智能小车,比如自动寻迹、自动避障、手机蓝牙遥控等。想着还缺个WIFI控制的,那就用TPYBoard v202做一个吧。

    设计思路
    -------------------------

    WIFI是目前最有广泛运用的一项无线网络传输技术,覆盖范围广,可远程。本次实现了远程WIFI控制,不仅可以在家里操作,还可以接入一些云平台,实现远程操控。具体思路如下:

    1、TPYBoard v202作为整个小车的核心控制部分,连接L298N电机驱动模块,实现小车的基本方向控制;

    2、TPYBoard v202接入网络,开启Socket服务实现web服务器功能;

    3、手机接入同一局域网,可通过浏览器访问控制页面,进行小车控制。


    所需器件
    ---------------------------------

    - TPYBoard v202开发板 1块
    - USB数据线(MicroUSB) 1条
    - L298N电机驱动模块 1个
    - 小车套件包(底板、电机等) 1个
    - 18650电池 2节
    - 18650电池盒 1个

    程序源码
    ----------------------------------

    TPYBoard v202 源代码(main.py)

    import socket                 #导入socket通信库
    import machine
    from machine import Pin
    
    g4 = Pin(4,Pin.OUT)
    g5 = Pin(5,Pin.OUT)
    g12 = Pin(12,Pin.OUT)
    g13 = Pin(13,Pin.OUT)
    
    def Go():
        g4.value(1)
        g5.value(0)
        g12.value(1)
        g13.value(0)
    def Back():
        g4.value(0)
        g5.value(1)
        g12.value(0)
        g13.value(1)
    
    def Left():
        g4.value(1)
        g5.value(0)
        g12.value(0)
        g13.value(0)
    def Right():
        g4.value(0)
        g5.value(0)
        g12.value(1)
        g13.value(0)
    def Stop():
        g4.value(0)
        g5.value(0)
        g12.value(0)
        g13.value(0)
    #-----------------------HTTP Server-----------------------#
    #ap模式下,默认ip地址为192.168.4.1
    addr = ('192.168.4.1',80) #定义socket绑定的地址,ip地址为本地,端口为80
    s = socket.socket()     #创建一个socket对象
    s.bind(addr)            #绑定地址
    s.listen(5)             #设置允许连接的客户端数量
    print('listening on:', addr)
    while True:
        cl, addr = s.accept() #接受客户端的连接请求,cl为此链接创建的一个新的scoket对象,addr客户端地址
        print('client connected from:', addr)
        cl_file = cl.makefile('rwb', 0) #返回与socket对象关联的文件对象。rwb:支持二进制模式的读写操作 0:默认值,不支持缓存
        req = b''
        while True:
            line = cl_file.readline() #读取发送过来的数据,直到
    换行结束
            if not line or line == b'
    ':
                break
            req += line
        print("Request:")
        req=req.decode('utf-8').split('
    ')
        #http header 解析
        req_data=req[0].lstrip().rstrip().replace(' ','').lower()
        print(req_data)
        if req_data.find('favicon.ico')>-1:
            cl.close()
            continue
        else:
            req_data=req_data.replace('get/?','').replace('http/1.1','')
            index = req_data.find('key=')
            value = req_data[index+4:index+6].lstrip().rstrip()
            print('key:',value)
            if value == 'go':
                Go()
            elif value == 'ba':
                Back()
            elif value == 'le':
                Left()
            elif value == 'ri':
                Right()
            else:
                Stop()
        with open("control.html", 'r') as f:
            for line in f:
                cl.send(line)
        #cl.send(response)   #返回html网页的数据
        cl.close()          #关闭socket

    硬件的连接
    ----------------------------

    网页效果
    -------------------------


    演示效果

    -------------------------

    `点击观看视频 <http://mpvideo.qpic.cn/0bf2hqaaeaaaveaa3ui5h5pfapgdai6aaaqa.f10002.mp4?dis_k=75bc9f531e0fe018cfc344a63c5fdc1d&dis_t=1579070805>`_


    源码下载
    --------------

    `下载源码 <https://github.com/TPYBoard/TPYBoard-v202/tree/master/12.%E6%99%BA%E8%83%BDWIFI%E8%BF%9C%E6%8E%A7%E5%B0%8F%E8%BD%A6>`_

  • 相关阅读:
    jvm的内部体系结构浅析--转
    完整java开发中JDBC连接数据库代码和步骤--转
    java语言的线程安全级别--转
    java 中hashcode 与 equals的关系
    mysql 错误 SQL Error: 1366: Incorrect string value: "xE8xAFxA6xE7xBBx86…" for column "address" a
    Linux查看CPU和内存使用情况
    5.2、访问限制
    5、面向对象编程(5.1、类和实例)
    4.5、偏函数
    4.4、装饰器
  • 原文地址:https://www.cnblogs.com/xiaowuyi/p/12196867.html
Copyright © 2011-2022 走看看