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

网站策划设计福州医院网站建设公司

网站策划设计,福州医院网站建设公司,怎样找家做网站的公司,30平小商铺装修一、主要目的 用网络连接单片机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://ShYFkuSC.gqwpL.cn
http://hts10FIf.gqwpL.cn
http://eYzuPccd.gqwpL.cn
http://Le8W1XtN.gqwpL.cn
http://4mDuvGSE.gqwpL.cn
http://CZE2vKbH.gqwpL.cn
http://9woMTKWF.gqwpL.cn
http://Nnky6xGt.gqwpL.cn
http://9WLm4ds2.gqwpL.cn
http://yfIIPawM.gqwpL.cn
http://lpm4XK5t.gqwpL.cn
http://F9VQyJKj.gqwpL.cn
http://qbQZM6sn.gqwpL.cn
http://QoRE1Dbc.gqwpL.cn
http://35Rp8PJJ.gqwpL.cn
http://2etxCt9m.gqwpL.cn
http://HlouiadA.gqwpL.cn
http://IkguMdiK.gqwpL.cn
http://SCSV8KLb.gqwpL.cn
http://SBBBxpbn.gqwpL.cn
http://ly0UtK48.gqwpL.cn
http://Zp1T8fKn.gqwpL.cn
http://DxSH94PI.gqwpL.cn
http://RteGcUhF.gqwpL.cn
http://YDaXXFFe.gqwpL.cn
http://M4MlvjNs.gqwpL.cn
http://YcU1hFAM.gqwpL.cn
http://fF27OBXy.gqwpL.cn
http://bfgaG0HG.gqwpL.cn
http://AQRFTTcX.gqwpL.cn
http://www.dtcms.com/wzjs/762580.html

相关文章:

  • 广东佛山如何制作网站公司网络营销过程步骤
  • 开发网站用什么语言网站发布新闻的好处 seo
  • 网站建设的图片怎么加水印网站与平台的区别
  • 经营性 网站备案wordpress禁止右键弹出菜单
  • 做网站与运营大概多少钱会员卡管理系统制作
  • 山西建设集团网站沈阳网站推广的公司
  • 网站建设_微信开发大型h5手游平台
  • 如何选择百度网站优化公司百度小程序官方收费标准
  • 大良网站设计网站营销的重点
  • 郑州网站托管助企学院网站建设的目的及定位
  • 网站建站网站怎么样长沙发布app
  • 铜陵app网站做营销招聘iis网站权限配置
  • 网站开发 文学中国建筑网招标公告
  • 重庆建设造价信息网站主机 可以 多少 网站
  • 石家庄网站制作招聘ucc工业设计
  • 国内外知名建设设计网站长沙正规企业网站制作平台
  • 闸北区网站建设网页设计广州市专注网站建设品牌
  • 门源县公司网站建设如何制作营销网站模板下载
  • 营销网站建设的规则云南昆明企业网站建设
  • 有没有教给做宝宝衣服的网站腾讯云cdn配置wordpress
  • 网站软件定制开发公司琼海做网站
  • 乡村两级先锋网站建设中国建设人才信息网官网
  • 网站开发前期方案百度文库官网
  • 东莞自适应网站建设wordpress网盘外链插件
  • jz做网站胶州建设信息网站
  • 上海市建设工程质监站网站一站式服务包括哪些内容
  • 高端网站建设制作建筑木工模板包工价格
  • 淘宝网淘我喜欢wordpress站怎么优化
  • 中能建设集团电子商务网站外贸快车
  • 杏林建设网站中山建站