当前位置: 首页 > news >正文

网站设计班培训/seo课程培训中心

网站设计班培训,seo课程培训中心,扶贫工作网站怎么做,南通网站建设推广专家一、主要目的 用网络连接单片机ESP32,发送命令控制管脚的打开、关闭; 二、技术思路 1、ESP32单片机开启AP热点接入模式的无线网; 2、笔记本电脑开启无线网卡,连接ESP32发出的无线网; 3、ESP32开启TCP服务端监听某个端口…
一、主要目的

     用网络连接单片机ESP32,发送命令控制管脚的打开、关闭;

二、技术思路

 1、ESP32单片机开启AP热点接入模式的无线网;

 2、笔记本电脑开启无线网卡,连接ESP32发出的无线网;

 3、ESP32开启TCP服务端监听某个端口;

 4、笔记本电脑开启Java程序,和ESP32建立TCP连接;

 5、控制台输入命令打开和关闭ESP32的端口;

三、ESP32的控制程序(python代码)

 1、引入依赖

import network
import machine
import socket
import _thread

 2、定义工具函数

  1)读取一行的函数

# 读取一行
# socket是TCP套接字
def readline(client):
    line = b''
    
    while True:
        temp = client.recv(1)
        
        if temp == b'\r':
            client.recv(1)
            break
        elif temp == b'':
            raise IOError("close")
        else:
            line = line + temp

    return line

  2)控制引脚的函数

# 打开引脚
def openPin(no):
    pin = machine.Pin(no, machine.Pin.OUT)
    pin.on()

# 关闭引脚
def closePin(no):
    pin = machine.Pin(no, machine.Pin.OUT)
    pin.off()
        
# 查看引脚状态
def showPin(no):
    pin = machine.Pin(no, machine.Pin.OUT)


    # 返回引脚状态
    return pin.value()

  3)判断是否引脚在范围内

# 判断是否在可控的管脚
def inPort(pin):
    
    # 可用的管脚号列表
    pins = [2, 4, 5, 12, 13, 14, 15, 18, 19,
            21, 22, 23, 25, 26, 27, 32, 33, 34, 35]

    # 如果在列表里
    if int(pin) in pins:
        return True
    else:
        return False

  3、线程的任务函数

# 执行方法
def execute_task(client, addr):
    try:
        while True:
            # 读取一行命令
            cmd = readline(client).decode("UTF-8")
                
            print("命令:")
            print(cmd)
        
            # 分割命令    
            cmds = cmd.split(" ")

            # 如果是open命令

            if cmds[0] == "open":
                if len(cmds) != 2 or not inPort(cmds[1]):
                    resp(client, 300, "argument error")
                else:
                    openPin(int(cmds[1]))
                    resp(client, 200, "OK")

            # 如果是show命令
            elif cmds[0] == "show":
                if len(cmds) != 2 or not inPort(cmds[1]):
                    resp(client, 300, "argument error")
                else:
                    resp(client, 200, str(showPin(int(cmds[1]))))
            elif cmds[0] == "close":
                if len(cmds) != 2 or not inPort(cmds[1]):
                    resp(client, 300, "argument error")
                else:
                    closePin(int(cmds[1]))
                    resp(client, 200, "OK")
            elif cmds[0] == "exit":
                resp(client, 200, "OK")
                break
            else:
                # 命令不正确
                resp(client, 300, "cmd incorrect.")

    except BaseException as e:
        print(e.args)
            
    finally:
        if client is not None:
            client.close()
        

# 回复结果
# code是代号,msg是消息文本
def resp(client,   code,   msg):
    client.send((str(code) + " " + msg + "\r\n").encode("UTF-8"))
   

4、开启无线网的AP热点

# 开启AP热点
def open_ap():
    # 1.1、发起WLAN的AP热点
    wlan = network.WLAN(network.AP_IF)

    # 1.2、开启
    wlan.active(True)

    # 1.3、配置SSID、密码、加密模式
    wlan.config(essid="ESP32_C")
    wlan.config(password="12345678")
    wlan.config(authmode=network.AUTH_WPA_WPA2_PSK)
      
 

  5、开启TCP服务端监听

# 3、开始监听处理
def listen_work():
    # 2.1 开启TCP服务端
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 2.2、绑定地址和端口
    port = 9999
    sock.bind(("0.0.0.0", port))
    print("监听端口:%d" % port)

    # 2.3、开始接听
    #  允许同时50个连接
    sock.listen(50)

    # 2.4、循环处理
    while True:
        # 阻塞获取客户端
        client, addr = sock.accept()
        
        print("客户端地址:%s" % str(addr))

        # 开启线程处理
        # 创建线程
        _thread.start_new_thread(execute_task, (client, addr))

6、开始运行

# 开始调用
open_ap()


listen_work()

四、控制客户端的代码(Java代码)

   在桌面电脑上运行,主动连接ESP32的无线网;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.SocketException;
import java.util.Scanner;

/**
 * 
 * @version 1.0.0
 * <p>
 * date: 2025/2/7
 **/
public class Client {

    public static void main(String[] args) {


        Socket s = null;

        try {
            // 1、创建控制台扫描器
            Scanner scan = new Scanner(System.in);

            //  2、获得连接;实际需要修改IP地址和端口;
            s = new Socket("192.168.4.1", 9999);

            // 3、输出流
            OutputStream out = s.getOutputStream();

            // 4、获得缓冲输入流
            BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream(),  "UTF-8"));

            String cmd = "";

            // 5、进入循环
            while(true){
                // 输出提示符
                System.out.print("esp32>");

                // 读取命令
                cmd = scan.nextLine();

                // 不为空
                if(!cmd.equals("")){

                    // 清除左右两边的不可见字符;
                    cmd = cmd.trim();

                    // 发送命令,以回车符和换行符结尾;
                    out.write((cmd + "\r\n").getBytes("UTF-8"));
                    out.flush();

                    // 打印结果
                    System.out.println(reader.readLine());


                    if(cmd.equals("exit")){
                        break;
                    }
                }
            }
        } catch (IOException e){
            e.printStackTrace();
        } finally{
            if (s != null){
                try {
                    s.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

五、控制命令格式

  1、命令格式如下:

命令名  空格  参数 回车符  换行符  

  本案例设计了open、close、show、exit共四个命令;

  2、服务器返回的结果格式:

3位数字  空格  说明字符串 回车符  换行符

  本案例设计200代表执行成功,300代表参数错误;

3、使用案例:

   运行时会弹出"esp32>"的提示符,然后输入命令。

   打开第2号引脚:

esp32>open 2

  关闭2号引脚:

esp32>close 2

  查看2号引脚的状态:

esp32>show 2

  退出连接:

esp32>exit

六、缺点和改进
 (一)缺点:

  1、目前还不够完善,参数分割不准确;

  2、支持的命令太少,功能不丰富;

  3、建立TCP连接后,没有身份认证;

  4、ESP32的无线网功率不足,控制距离太近;

  5、只能支持无线连接的电脑控制;

  (二)改进:

    1、增加功能,例如设置定时,让管脚定时多少分钟或者多少秒就打开或者关闭;

    2、增加密码的验证机制;验证不通过禁止控制;

    3、文本控制不准确,未来可采用二进制协议格式通信;

    4、程序可以改进的更方便执行;

    5、添加移动客户端的控制;例如安卓APP、微信小程序等等;

http://www.lryc.cn/news/580620.html

相关文章:

  • 网站建设合同 域名/今日最新消息新闻报道
  • 重庆智能网站建设企业/网络营销的表现形式有哪些
  • 在xampp下搭建本地网站/免费软文发布平台有哪些
  • 网页升级未成年人自觉离开/北京网站优化多少钱
  • 大同市发改委门户网站医院建设/网页版百度
  • 企业建站免费代码/最有效的app推广方式有哪些
  • 手机微信网站建设/域名注册哪个平台比较好
  • 哪些网站做黑名单/国家反诈中心app下载
  • 十大永久免费网络游戏/青岛设计优化公司
  • 广西汽车网网站建设/色盲测试图第六版及答案大全
  • 学院网站建设管理办法/站长工具端口
  • 网站建设与维护 唐清安/上海谷歌优化
  • 科技小论文怎么写/公司seo排名优化
  • 长沙网站推广 下拉通推广/千万不要做手游推广员
  • flashfxp如何发布网站/做外贸有哪些网站平台
  • 做网站有什么好的推荐/网络营销技巧和营销方法
  • 如何制作手机版网站/seo入门讲解
  • 颜色搭配对网站重要性/网站热度查询
  • 安全生产规章制度建筑公司网站/近三天发生的重要新闻
  • 商城类网站建设方案/长春seo排名外包
  • 北京展览网站建设/seo网站优化推荐
  • 网站建设公司源码/百度推广怎么收费标准案例
  • 潍坊知名网站建设服务商/国内推广平台有哪些
  • 做网站服务器多少钱/推广引流软件
  • 做那种事的网站/网站如何被百度快速收录
  • 网站建设的经费估算/无锡网站建设公司
  • 微信登陆wordpress/排名优化方法
  • 做伦理电影网站/最新长尾关键词挖掘
  • 中国城市建设网网站/兰州seo
  • 答题网站怎么做/宁波网站建设公司