esp32s3 usb 相关

使用espidf环境,通过s3usb host,发送ESCPOS指令集传输给热敏打印机,打印文字和图片。
个人对usb协议不了解,也对官方文档看不明白
想寻求一个可以解决的代码方案,谢谢

是usb host模式的不?

结合STM32的例程,把USB库换成ESP32S3的

这是我之前windows调试USB打印机的代码 希望对你有帮助

#include "stdafx.h"
#include "SysPublic.h"
#include <setupapi.h>
#include <windows.h>  
#include "stdio.h"  
#include "bmp.h"
HANDLE  UsbHandle;
//#define HEAD_STRING            "������Ʊ<11ѡ5>\r\n" 
#define HEAD_STRING            "��ʱ���11ѡ5\r\n" 
#define NUMBER_STRING        "000010-188264-149000-010038 226402"
#define NUMBER1_STARING        "aq6QKl\r\n"
#define PER_STRING            "�� 17111116�� ��5��"
#define OPEN_STRING            "17/11/11����\r\n"
#define STRING_TEST "��ѡ�� ��ʽƱ 3�� �ϼ�60Ԫ\r\n��    01+02+03+04+05\r\n��    02+08+09+10+11\r\n \r\n \r\n \r\n \r\n"
#define STRING_CUT_LINE        "------------------------------------------\r\n"
#define _EXT_LINE_    "**�������  ��������**����͸���أ�46.41�ڣ������Ƽ����ƿ�˹��VS�����¸����洫ͳ����ʤƽ��4��1���н����Ͳ�Ʊ\r\n"
#define _EXT_LINE_1    "�����������Ͻ�40��\r\n"
#pragma warning(disable:4996)
#pragma warning(disable:4267)

void GetPath(char * path)
{
    GUID InterfaceClassGuid = {0xa5dcbf10L, 0x6530, 0x11d2, {0x90, 0x1f, 0x00, 0xc0, 0x4f, 0xb9, 0x51, 0xed}};
    HDEVINFO hdevClassInfo; 
    hdevClassInfo = SetupDiGetClassDevs(&InterfaceClassGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
    DWORD nMemberIndex;
    for(nMemberIndex = 0; true; nMemberIndex++)
    {
        SP_DEVICE_INTERFACE_DATA  DeviceInterfaceData;
        DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
        BOOL nStatus = SetupDiEnumDeviceInterfaces(hdevClassInfo, NULL, &InterfaceClassGuid, nMemberIndex, &DeviceInterfaceData);
        if (!nStatus)
        {
            break;
        }
        DWORD RequiredSize;
        nStatus = SetupDiGetDeviceInterfaceDetail(hdevClassInfo, &DeviceInterfaceData, NULL, 0, &RequiredSize, NULL);
        PSP_DEVICE_INTERFACE_DETAIL_DATA pBuffer;
        pBuffer = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(RequiredSize);
        pBuffer->cbSize = sizeof(*pBuffer);
        SP_DEVINFO_DATA DeviceInfoData;
        DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA) ;
        nStatus = SetupDiGetDeviceInterfaceDetail(hdevClassInfo, &DeviceInterfaceData, pBuffer, RequiredSize, &RequiredSize, &DeviceInfoData);
        if(!nStatus)
        {
            break;
        }
        if(strstr(pBuffer->DevicePath,"vid_0483&pid_5743"))
        {
            strcpy(path,pBuffer->DevicePath);
            break;
        }
        
    }
}
BOOL DeviceWrite(HANDLE handle, LPCVOID lpBuffer, DWORD dwSize)  
{  
 
    DWORD dwRet;  
    BOOL bRet;  
    bRet = WriteFile(handle, lpBuffer, dwSize, &dwRet, NULL);  
    return bRet;  
} 
void UsbRead(void)
{
    printf("ThreadOne is Runing\n");  
    char buffer[1024] = {0x00};
    DWORD read = 0;
while(1)
{
    ReadFile(UsbHandle, buffer, sizeof(buffer), &read, NULL); 
    if(read != 0)
    {
        for(DWORD i = 0; i < read; i++)
        {
            TRACE("%02x ",buffer[i]);
        }
    }
    Sleep(100);
}
}
char ReadFlag = 0;
DWORD WINAPI ThreadReadUSB(LPVOID lpParameter)  
{  
    
    char buffer[2] = {0x00};
    DWORD read = 0;
    DeviceWrite(UsbHandle,"\x10\x04\x01",3);
    while(ReadFlag)
    {

        Sleep(100);
        BOOL a = ReadFile(UsbHandle, buffer, 1, &read, NULL); 
        if(read == 1)
        {
            TRACE("%02x ",buffer[0]);

        }
    }
    return 0;  
}  
  
  
  
void OpenUSB(void)
{
    char path[256] = {0x00};
    //HANDLE HOne; 
    ReadFlag = 0;
    GetPath(path);
    UsbHandle = CreateFile(path,GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,OPEN_EXISTING, 0, NULL);
    ReadFlag = 1;
//    HOne=CreateThread(NULL,0,ThreadReadUSB,NULL,0,NULL);

}
void SetXY(char x, char y)
{
    char buf[4] = {0x00};
    buf[0] = 0x1D;
    buf[1] = 0x50;
    buf[2] = x;
    buf[3] = y;
    DeviceWrite(UsbHandle,buf, 4);
}
void SetLeft(void)
{
    DeviceWrite(UsbHandle,"\x1B\x61\x00", 3);
}
void SetRight(void)
{
    DeviceWrite(UsbHandle,"\x1B\x61\x02", 3);
}
void Dark24_24(bool mode)
{
    if(mode)
    {
        DeviceWrite(UsbHandle,"\x1B\x21\x29", 3);
    }else{
        DeviceWrite(UsbHandle,"\x1B\x21\x00", 3);
    }
}
void FontZoom(char var)
{
    switch(var)
    {
    case 1:
        DeviceWrite(UsbHandle,"\x1D\x21\x00", 3);
        break;
    case 2:
        DeviceWrite(UsbHandle,"\x1D\x21\x11", 3);
        break;
    case 3:
        DeviceWrite(UsbHandle,"\x1D\x21\x22", 3);
        break;
    case 4:
        DeviceWrite(UsbHandle,"\x1D\x21\x33", 3);
        break;
    default:
        break;

    }
}
void PrintTest(void)
{
    OpenUSB();
    
    //PrintHead();
    //Sleep(1000);

    SetCenter();
    FontZoomIn();
    DeviceWrite(UsbHandle,HEAD_STRING, strlen(HEAD_STRING));
    SetLF();
    FontZoomOut();
    CancleDark();
    DeviceWrite(UsbHandle,NUMBER_STRING, strlen(NUMBER_STRING));
    SetDark();
    DeviceWrite(UsbHandle,"5", 1);
    CancleDark();;
    DeviceWrite(UsbHandle,NUMBER1_STARING, strlen(NUMBER1_STARING));
    DeviceWrite(UsbHandle,PER_STRING, strlen(PER_STRING));
    DeviceWrite(UsbHandle,OPEN_STRING, strlen(OPEN_STRING));
    SetDark();
    DeviceWrite(UsbHandle,STRING_TEST, strlen(STRING_TEST));
    StartPrintAndCutPaper();
}

SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
BOOL nStatus = SetupDiEnumDeviceInterfaces(hdevClassInfo, NULL, &InterfaceClassGuid, nMemberIndex, &DeviceInterfaceData);
if (!nStatus)
{
break;
}
DWORD RequiredSize;
nStatus = SetupDiGetDeviceInterfaceDetail(hdevClassInfo, &DeviceInterfaceData, NULL, 0, &RequiredSize, NULL);
PSP_DEVICE_INTERFACE_DETAIL_DATA pBuffer;
pBuffer = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(RequiredSize);
pBuffer->cbSize = sizeof(*pBuffer);
SP_DEVINFO_DATA DeviceInfoData;
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA) ;
nStatus = SetupDiGetDeviceInterfaceDetail(hdevClassInfo, &DeviceInterfaceData, pBuffer, RequiredSize, &RequiredSize, &DeviceInfoData)

把USB库换成ESP32S3

参考链接

ESP32-S3 USB & UART 下载总结_25March的博客-CSDN博客_esp32 usb ESP32-S3 支持两种下载方式:UART0 下载和 USB 下载。1 UART0 下载参见 ESP32S3 固件烧录需满足的硬件环境串口驱动参见 与 ESP32-S3 创建串口连接2 USB 下载ESP32-S3 系列集成了全速 USB OnThe-Go (OTG) 接口,符合 USB 1.1 规范,可以支持使用 USB 下载固件和 USB 通信ESP32-S3 USB 下载说明参见 Device Firmware Upgrade through USB 说明2.1. https://blog.csdn.net/Marchtwentytwo/article/details/121169467?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166745199516782414950691%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166745199516782414950691&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduend~default-1-121169467-null-null.nonecase&utm_term=esp32s3%20usb&spm=1018.2226.3001.4450