测试ESP32-Zigbee转发命令 : 滑轨、继电器控制

举报
tsinghuazhuoqing 发表于 2022/08/05 00:24:50 2022/08/05
【摘要】 简 介: 本文给出了利用ESP32-Zigbee 转发模块控制滑轨与继电器控制命令。 关键词: ESP32,Zigbee,继电器 ...

简 介: 本文给出了利用ESP32-Zigbee 转发模块控制滑轨与继电器控制命令。

关键词 ESP32Zigbee继电器

ESP32转发Zigbee
目 录
Contents
继电器命令
滑轨控制命令
单轴步进驱
动SH-20403
双轴滑轨控制
双轴SH20403
总 结

 

§01 ESP32转发Zigbee


   利用ESP32构造一个ZIGBEE的网络发送转接 构造了一个通过ESP32转发ZigBee转发模块。下面对于这个模块中相关的很多命令进行测试。

一、继电器命令

  改造其中的 zbcmd 函数,然后重新定义了一组继电器相关的命令。下面命令经过测试都可以正常执行。

#------------------------------------------------------------
ESP32_ZIGBEE_IP     = '192.168.0.114'
ESP32_ZIGBEE_PORT   = 4567

def zbcmd(str):
#    ccloadSerial.write(str + b'\r')
    strcmd = str + '\r'
    udpsendstr(ESP32_ZIGBEE_IP,
               ESP32_ZIGBEE_PORT,
               strcmd)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

  下面是相应的改造命令:

#------------------------------------------------------------
def V45ON():
    zbcmd('on')

def V45OFF():
    zbcmd('off')

def V45SET(num):
   zbcmd('set %d'%num)

#------------------------------------------------------------
def RClick():
    zbcmd('solenoidrelay pulse 4 50')

def R1Click(t):
    zbcmd('solenoidrelay pulse 2 %d'%t)
    zbcmd('solenoidrelay pulse 2 %d'%t)

def R2Click(t):
    zbcmd('solenoidrelay pulse 8 %d'%t)
    zbcmd('solenoidrelay pulse 8 %d'%t)

def R1ON():
    zbcmd('solenoidrelay on 2')
    zbcmd('solenoidrelay on 2')

def R1OFF():
    zbcmd('solenoidrelay off 2')
    zbcmd('solenoidrelay off 2')

def R2ON():
    zbcmd('solenoidrelay on 8')
    zbcmd('solenoidrelay on 8')

def R2OFF():
    zbcmd('solenoidrelay off 8')
    zbcmd('solenoidrelay off 8')

def OCON(bit123):
    setbit = 0x0

    if (bit123 & 0x1) != 0:
        setbit = setbit | 0x10

    if (bit123 & 0x2) != 0:
        setbit = setbit | 0x20

    if (bit123 & 0x4) != 0:
        setbit = setbit | 0x40

    zbcmd('solenoidrelay on %x'%setbit)

def OCOFF(bit123):
    setbit = 0x0

    if (bit123 & 0x1) != 0:
        setbit = setbit | 0x10

    if (bit123 & 0x2) != 0:
        setbit = setbit | 0x20

    if (bit123 & 0x4) != 0:
        setbit = setbit | 0x40

    zbcmd('solenoidrelay off %x'%setbit)

def RAllON():
    zbcmd('solenoidrelay set 0x7b')

def RALLOFF():
    zbcmd('solenoidrelay set 0x0')

def RSetHV(num):
    zbcmd('solenoidrelay hv %x'%num)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

二、滑轨控制命令

1、单轴步进驱动SH-20403

  在 单轴步进驱动模块SH-20403 给出了 SH-20403的驱动参数。

▲ 图1.2.1  单轴驱动器

▲ 图1.2.1 单轴驱动器

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# LSCM8.PY                     -- by Dr. ZhuoQing 2022-08-01
#
# Note:
#============================================================

from headm import *
from tsmodule.tshardware    import *


#------------------------------------------------------------
COMMAND_FRAME_HEAD		= 0x56
COMMAND_FRAME_TAIL		= 0x65

COMMAND_STATUS_WAIT		= 0x0
COMMAND_STATUS_COMMAND	        = 0x1
COMMAND_STATUS_LENGTH	        = 0x2
COMMAND_STATUS_DATA		= 0x3
COMMAND_STATUS_CHECK	        = 0x4
COMMAND_STATUS_TAIL		= 0x5

#------------------------------------------------------------
COMMAND_HELLO_ECHO		= 0x20
COMMAND_BEEP_ON			= 0x21
COMMAND_BEEP_OFF		= 0x22
COMMAND_DIR_ON			= 0x23
COMMAND_DIR_OFF			= 0x24
COMMAND_REL_ON			= 0x25
COMMAND_REL_OFF			= 0x26
COMMAND_PUL_SET			= 0x27
COMMAND_PUL_STOP		= 0x28
COMMAND_GOTO_HEAD		= 0x29
COMMAND_GOTO_TAIL		= 0x2A
COMMAND_GET_STATE		= 0x2B
COMMAND_GET_PULSEOUT	        = 0x2C
COMMAND_CLEAR_PULSEOUT	        = 0x2D

#------------------------------------------------------------
def lscm8cmd(cmd, cmddata):

    checksum = cmd + len(cmddata)
    for cd in cmddata:
        checksum = checksum + cd

    checksum = (checksum & 0xff) ^ 0xff

    cmdstr = b'' + byte(COMMAND_FRAME_HEAD) + byte(cmd) + byte(len(cmddata)) +\
             cmddata + byte(checksum) + byte(COMMAND_FRAME_TAIL)

    zbdata(cmdstr)

def lscm8hello():
    lscm8cmd(COMMAND_HELLO_ECHO, b'')

def lscm8beepon():
    lscm8cmd(COMMAND_BEEP_ON, b'')

def lscm8beepoff():
    lscm8cmd(COMMAND_BEEP_OFF, b'')

#------------------------------------------------------------
def lscm8relon(bits):
    cmd = bits.to_bytes(1, byteorder='big')
    lscm8cmd(COMMAND_REL_ON, cmd)

#------------------------------------------------------------
# bits:0:relay0, 1:relay1
def lscm8reloff(bits):
    cmd = bits.to_bytes(1, byteorder='big')
    lscm8cmd(COMMAND_REL_OFF, cmd)

def lscm8diron(bits):
    cmd = bits.to_bytes(1, byteorder='big')
    lscm8cmd(COMMAND_DIR_ON, cmd)

def lscm8diroff(bits):
    cmd = bits.to_bytes(1, byteorder='big')
    lscm8cmd(COMMAND_DIR_OFF, cmd)

#------------------------------------------------------------
def lscm8setpulse(bits, pulse):
    cmd = bits.to_bytes(1, byteorder='big') +\
          pulse.to_bytes(4, byteorder='big')
    lscm8cmd(COMMAND_PUL_SET, cmd)

def lscm8stoppulse():
    lscm8cmd(COMMAND_PUL_STOP, b'')

def lscm8gotohead():
    lscm8cmd(COMMAND_GOTO_HEAD, b'')

def lscm8gototail():
    lscm8cmd(COMMAND_GOTO_TAIL, b'')

def lscm8clearpulseout():
    lscm8cmd(COMMAND_CLEAR_PULSEOUT, b'')

def lscm8mf(steps):
    lscm8diron(3)
    lscm8reloff(3)
    lscm8setpulse(3, steps)

def lscm8mb(steps):
    lscm8diroff(3)
    lscm8reloff(3)
    lscm8setpulse(3, steps)

#------------------------------------------------------------
if __name__ == "__main__":
    lscm8mb(1000)
#------------------------------------------------------------
#        END OF FILE : LSCM8.PY
#============================================================

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115

2、双轴滑轨控制

  这个控制器在 DRV8825步进电机驱动控制模块以及双轴平台 进行了描述。

▲ 图1.2.1  Zigbee双轴驱动器

▲ 图1.2.1 Zigbee双轴驱动器

  三组命令:

  • zbcmd(’drvm1 1000’) : 对于顶层移动;
  • zbcmd(’drvm2 1000’):对于底层驱动;
  • zbcmd(’drvorg’) : 两个电机都回复的复位原点。

  当参数大于零时,平台原理步进电机;当参数小于0,平台移动到步进电机;

  • 移动参数: N= 200000,移动距离:6.6mm
from headm import *
from tsmodule.tshardware    import *

zbcmd('drvorg')

  
 
  • 1
  • 2
  • 3
  • 4

3、双轴SH20403

  在 SH-20403AXIS12双轴蓝牙移动框架 给出了这款ZIGBEE移动控制框架的描述。

▲ 图1.2.3  SH-20403双轴蓝牙移动

▲ 图1.2.3 SH-20403双轴蓝牙移动

(1)波特率:115200;
(2)COM2:该端口已经连接有ZIGBEE

(1)波特率:115200;
(2)COM2:该端口已经连接有ZIGBEE

  2.通讯命令
  ① sm2pul n1 n2 : 同时移动AXIS1,AXIS2
  ② sm2pul1 n1:移动AXIS1

  n1的范围 41000
  ③ sm2pul2 n2:移动AXIS2

  n2范围:195000:
  移动距离100mm
  ④ sm2arr n : 0~65535 :设置TIM1的ARR
  该数值不要小于50.

 

  结 ※


  文给出了利用ESP32-Zigbee 转发模块控制滑轨与继电器控制命令。


■ 相关文献链接:

● 相关图表链接:

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/126087539

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。