- Esta série de aprendizado de blog é escrita por uma equipe não oficial com meio coração . É apenas para troca e compartilhamento técnico pessoal, não para uso comercial. Se houver algo errado, por favor deixe uma mensagem e eu vou mudar a tempo.
Série 1: Notas da Série de Aprendizagem Básica do Módulo da Série ESP32
1. Subir no poço para aprender uma nova jornada, construir um ambiente de desenvolvimento esp32 em uma máquina virtual e imprimir "Hellow World". 2. Usando habilmente o editor de eclipes, o tutorial oficial constrói um ambiente de desenvolvimento esp32 no Windows e imprime "Hellow World". 3. Conheça a interface GPIO do esp32 básico, comece a acender seu primeiro LED e interrompa o retorno de chamada para realizar a função do botão. 4. Experimente a poderosa função de timer do esp32, realize o tempo de 2s para piscar uma luz LED. 5. Entre em contato e pratique a função de pulso de largura pwm do esp32 para realizar o efeito respiratório e piscar uma luz LED. 6. A realização de smartConfig e WeChat airKiss em esp32, configuração de rede com um clique e conexão fácil e rápida ao roteador. 7. Use a interrupção GPIO para fazer um pressionamento curto e um evento de retorno de chamada de pressionamento longo de um botão, não precisa mais se preocupar com a fonte do acionador. 8. Realize a função de cliente e servidor UDP local no esp32 e realize a comunicação na LAN. 9. Realize a função de cliente e servidor TCP local no esp32, que pode retornar dados desconectando e reconectando a rota original. 10. A programação Espressif esp32 SDK usa rmt para conduzir luzes coloridas ws2812 para obter efeitos de gradiente de arco-íris. 11. Comece com o desenvolvimento da estrutura de áudio Espressif esp-adf, construa um fone de ouvido Bluetooth com esp32, realize funções como troca de músicas e obtenção de informações sobre músicas. 12. Abra o código-fonte de uma rede de distribuição airkiss de conta pública WeChat esp32 e um projeto de função de descoberta de LAN e compartilhe um gadget de rede de distribuição airkiss. 13. esp32 tem um servidor dns embutido, não há necessidade de acessar o nome de domínio da rede externa para retornar à página da web especificada. 14. A programação Esp32 sdk implementa a autenticação obrigatória do portal. Após a conexão com o hotspot esp32, a interface de login especificada aparecerá automaticamente.
15. Entenda a estrutura de reconhecimento de ativação de voz off-line local esp-skainet para realizar o controle de reconhecimento local de voz de hardware de baixo custo. 16. Aprendendo a estrutura de reconhecimento off-line de ativação de voz local esp-skainet, como modificar a palavra de ativação?Como personalizar a palavra de comando? Como fazer ação intencional? 17. Lançado em toda a rede, o Espressif esp32 sdk está diretamente conectado à plataforma aberta JD Weilian·Xiaojingyu·IoT para realizar o controle de voz inteligente do áudio Dingdong. 18. Comece com o desenvolvimento H5 do painel de controle de Jingdong Weilian Xiaojingyu, entenda a sintaxe do Vue e crie sua própria página de controle. 19. Heavy open source, como conectar esp32 e blufi com ble no miniaplicativo WeChat! 20. Um bom artigo, o firmware do esp32 compilado durante o processo de desenvolvimento é muito grande para iniciar normalmente? Ensina como customizar a tabela de partição partitions.csv. 21. A rede de distribuição bluetooth esp32 blufi é altamente compactada, fácil de integrar, fácil de usar, fácil de usar e melhora a eficiência do desenvolvimento! 22. Discuta o "arroz da juventude" do programador e compartilhe a realização de vários algoritmos de criptografia md5 | AES CBC-ECB | Sha1 | Sha256 e assim por diante no esp32! 23. A placa de desenvolvimento de áudio Anxinke esp32-a1s transplantou a estrutura de áudio esp-adf mais recente, um pequeno teste de como realizar a reprodução online de conversão de texto em fala. 25. Compartilhe o pacote que realiza o ajuste suave da temperatura de cor da luz fria e quente no esp32 SDK e integre-o facilmente ao seu projeto. 26. Compartilhe como usar o CMake para compilar na janela, a velocidade de compilação é melhorada em um nível em comparação com a compilação tradicional, e ESP32 e ESP32-C3 são suportados. 27. Instale o ambiente ESP8266/ESP32 com o Linux embutido na plataforma windows10 e não há necessidade de instalar uma máquina virtual adicional.
Série 2: notas da série da placa de desenvolvimento da câmera ESP32
1. Anxinke ESP32-Cam placa de desenvolvimento de câmera de desenvolvimento secundário programação C SDK, realiza transmissão remota de fotos MQTT para o servidor privado. 2. Anxinke ESP32-Cam placa de desenvolvimento de câmera desenvolvimento secundário programação C SDK para realizar monitoramento de fluxo de vídeo local. 3. Anxinke ESP32-Cam placa de desenvolvimento de câmera desenvolvimento secundário programação C SDK, as fotos tiradas são transmitidas para o computador host PC através da porta serial com fio.
Série 3: Notas da Série do Módulo ESP32-C3
Série 4: Notas da Série do Módulo ESP32-S3
Diretório de artigos
prefácio
O primeiro lote de amostras do ESP32-S3
módulo foi obtido. Hoje vou compartilhar com vocês as especificações deste módulo. Este módulo se concentra precisamente no mercado AIoT e responde às necessidades técnicas do mercado para algoritmos AI. Em seguida, este artigo apresenta o ESP32-S3
driver no módulo Câmera OV2640
, o acompanhamento continuará a atualizar esta série de postagens no blog.
1. Características do produto ESP32-S3
Peguei a amostra ESP32-S3 da Anxinke, claro que tenho que verificar suas especificações.
CPU e armazenamento
• Processador Xtensa® LX7 dual-core de 32 bits , frequência principal de até 240 MHz
• Largura do barramento de dados de 128 bits, suporte a instruções SIMD
• 384 KB ROM
• 512 KB SRAM
• 16 KB RTC SRAM
• SPI, Dual SPI, Quad SPI As interfaces Octal SPI, QPI e OPI são conectadas externamente a vários flashes e RAM off-chip
Interfaces Periféricas e Sensores
• 45 × portas GPIO • Interface digital:
• 4 × SPI
• 1 × interface LCD (RGB paralelo de 8 bits a 16 bits, I8080, MOTO6800), suporta conversão entre RGB565, YUV422, YUV420, YUV411
• 1 × DVP 8- interface de câmera de ~16 bits
• 3 × UART
• 2 × I2C
• 2 × I2S
• 1 × RMT (TX/RX)
• 1 × contador de pulsos
• Controlador LED PWM, até 8 canais
• 1 × USB OTG de velocidade total
• 1 × controlador Serial/JTAG USB
• 2 × MCPWM
• 1 × interface host SDIO com 2 slots de cartão
• controlador DMA, 5 canais de recepção e 5 canais de transmissão
• 1 × controlador TWAI® (compatível com ISO11898-1)
• 2 × 12- bit SAR ADC, até 20 canais
• 1 × sensor de temperatura – 14 × GPIO de detecção capacitiva • Temporizadores:
• 4 × temporizador de uso geral de 54 bits
• 1 × temporizador de sistema de 52 bits
• 3 × temporizador de watchdog
Características de consumo de energia
O ESP32-S3 adota tecnologia avançada de gerenciamento de energia, que pode alternar entre diferentes modos de consumo de energia. Os modos de energia suportados pelo ESP32-S3 são:
• Modo ativo : a CPU e o chip de rádio estão funcionando. Os chips podem receber, transmitir e ouvir sinais.
• Modo de hibernação do modem : a CPU pode funcionar com frequência de clock configurável. A banda base Wi-Fi e o rádio estão desligados, mas o Wi-Fi permanece conectado.
• Modo de suspensão leve : a CPU está suspensa. Os periféricos RTC e os coprocessadores ULP podem ser ativados periodicamente por temporizadores para serem executados. Qualquer evento de ativação (MAC, host, temporizador RTC ou interrupção externa) ativará o chip. Wi-Fi permanece conectado.
• Modo de suspensão profunda : a CPU e a maioria dos periféricos estão desligados, apenas a memória RTC e os periféricos RTC estão funcionando. Os dados de conexão Wi-Fi são armazenados no RTC. O coprocessador ULP funciona.
• Modo de hibernação : O relógio do oscilador RC rápido integrado e o coprocessador ULP são desativados. Apenas 1 temporizador de relógio RTC no relógio de baixa velocidade e alguns GPIOs RTC estão funcionando. O temporizador do relógio RTC ou RTC GPIO pode ativar o chip do modo de hibernação. equipamento em
Diferentes modos de consumo de energia têm consumo de corrente diferente, consulte o seguinte para obter detalhes:
modo de energia | descrever | valor típico | unidade |
---|---|---|---|
Sono leve | A CPU está parada. | 240 | µA |
Sono profundo | A memória RTC e os periféricos RTC estão ativos | 8 | µA |
Hibernação | A memória RTC está ativa, os periféricos RTC estão desligados | 7 | µA |
Desligar | O pino CHIP_PU é puxado para baixo e o chip é desligado | 1 | µA |
2. Preparação
hardware
-
Módulo Anxinke ESP32-S3.
-
Ferramenta de depuração TTL-USB (recomenda-se usar o chip de porta serial CP2102, para garantir tensão e corrente suficientes).
Programas
- Construção do ambiente: ambiente Linux para construir o branch master
- Configurações da cadeia de ferramentas: baixe a cadeia de ferramentas, a versão usada pelo blogueiro é:
gcc version 5.2.0 (crosstool-NG crosstool-ng-1.22.0-97-gc752ad5)
- Versão Python:
Python 3.8
fiação
pino da câmera | pino do módulo |
---|---|
pin_pwdn | GPIO_NUM_35 |
pin_reset | GPIO_NUM_36 |
pin_xclk | GPIO_NUM_15 |
pin_sscb_sda | GPIO_NUM_4 |
pin_sscb_scl | GPIO_NUM_5 |
pin_d7 | GPIO_NUM_16 |
pin_d6 | GPIO_NUM_17 |
pin_d5 | GPIO_NUM_18 |
pin_d4 | GPIO_NUM_12 |
pin_d3 | GPIO_NUM_11 |
pin_d2 | GPIO_NUM_10 |
pin_d1 | GPIO_NUM_9 |
pin_d0 | GPIO_NUM_8 |
pin_vsync | GPIO_NUM_6 |
pin_href | GPIO_NUM_7 |
pin_pclk | GPIO_NUM_13 |
3. Protocolo e princípio de comunicação
3.1 Servidor de upload de fotos do módulo
Protocolo: HTTP
POST /index.php HTTP/1.1
Host: www.domain.com
Content-Type: image/jpeg
Name-Pic: name
Content-Length: 12540
"<file contents here>"
3.2 O applet envia instruções ao módulo para tirar fotos e enviá-las ao servidor
Protocolo: MQTT
Tópico: /light/deviceIn
payload:
{
"action" : "0" ,
"name" : "pic-name"
}
3.3 O módulo chama de volta o resultado do servidor de upload para o applet
Protocolo: MQTT
Tópico: /light/deviceOut
payload:
{
"url" : "base64(url)"
}
url é a URL da imagem que pode ser acessada da rede externa após tirar a foto, criptografada com base64.
4. Preparação do servidor
3.1 Receber processamento de imagem
Esse código é enviado pelo protocolo HTTP POST e a imagem é carregada no servidor em formato binário. Seu formato é o seguinte:
POST /index.php HTTP/1.1
Host: www.domain.com
Content-Type: image/jpeg
Name-Pic: name
Content-Length: 12540
"<file contents here>"
Portanto, o servidor deve receber fluxos de dados, tomando como exemplo a PHP
linguagem :
//接受数据流
$stream = file_get_contents('php://input');
//数据流转化为png格式,并保存在指定的位置
$len = file_put_contents('/www/wwwroot/static/' . time() . ".png", $stream);
3.2 Receber processamento de imagem
public function upload()
{
$getPostDataArry = apache_request_headers();
try {
$name = $getPostDataArry['Name-Pic'];
} catch (Exception $e) {
if (empty($name)) {
$response_data['code'] = 1;
$response_data['des'] = ' Name-Pic is not exist';
return json($response_data);
}
}
//接受数据流
$stream = file_get_contents('php://input');
//数据流转化为png格式,并保存在指定的位置
$len = file_put_contents('/www/wwwroot/www.xuhongv.com/public/icon/' . $name . ".png", $stream);
$response_data = [];
if ($len) {
$accessKeyId = "LTAI4Fg*********YJBLPoTo5";
$accessKeySecret = "OT7s9vkQd*******4p8KQ31qoTIL4";
$endpoint = "we****ong.oss-cn-hongkong.aliyuncs.com";
$bucket = 'web****hong';
try {
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, true);
//判断存储空间是否存在
$isExist = $ossClient->doesBucketExist($bucket);
if (!$isExist) {
$response_data['code'] = 1;
$response_data['des'] = $endpoint . ' is not exist';
return json($response_data);
}
$options = array();
//oss 存储文件路径
$object = "images/" . $name . ".png";
$ossClient->uploadFile($bucket, $object, '/www/wwwroot/www.xuhongv.com/public/icon/' . $name . ".png", $options);
} catch (OssException $e) {
$response_data['code'] = 1;
$response_data['des'] = $e->getMessage();
return json($response_data);
}
$response_data['code'] = 0;
$response_data['des'] = 'uploadup ok';
$response_data['url'] = base64_encode("https://" . $endpoint . '/' . $object);
return json($response_data);
}
$response_data['code'] = 1;
$response_data['des'] = "error , the upload file length is" . $len;
return json($response_data);
}
}
3.3 Lógica de negócios do servidor
- Receba as imagens enviadas pelo módulo S3 e armazene-as em uma pasta no servidor local.
- Ao mesmo tempo, envie esta imagem para o Alibaba Cloud Object Storage e retorne um endereço que possa acessar remotamente a imagem para o módulo.
5. Preparação de desenvolvimento incorporado
Configure as informações do servidor, tire uma foto e faça o upload.
//配置服务器相关信息
esp_http_client_config_t config = {
.url = "http://domain.xuhongv.com/api/upload",
.method = HTTP_METHOD_POST,
.event_handler = _http_event_handler,
.buffer_size = 4096,
.user_data = local_response_buffer,
.buffer_size_tx = 4096 * 5,
.timeout_ms = 10000
};
//开始拍照
pic = esp_camera_fb_get();
if (!pic)
{
ESP_LOGE(TAG, "Camera capture failed");
goto end;
}
else
{
esp_camera_fb_return(pic);
pic = esp_camera_fb_get();
if (!pic)
{
ESP_LOGE(TAG, "Camera capture failed");
}
else
{
//拍照成功,获取其大小、尺寸等信息
ESP_LOGI(TAG, "Camera capture OK , Its size was: %zu bytes", pic->len);
ESP_LOGI(TAG, "Camera capture OK , Its width was: %d", pic->width);
ESP_LOGI(TAG, "Camera capture OK , Its height was: %d ", pic->height);
esp_http_client_handle_t esp_client = esp_http_client_init(&config);
//设置HTTP请求头为image/jpg表示图片类型
esp_http_client_set_header(esp_client, "Content-Type", "image/jpg");
//设置图片名字
esp_http_client_set_header(esp_client, "Name-Pic", &(test_task_param->pic_name_p));
//把图片放在body里面
esp_http_client_set_post_field(esp_client, (const char *)pic->buf, pic->len);
//开始执行请求服务器
res = esp_http_client_perform(esp_client);
//判断是否请求成功
if (res == ESP_OK)
{
ESP_LOGI(TAG, "HTTPS Status = %d", esp_http_client_get_status_code(esp_client));
}
else
{
ESP_LOGE(TAG, "perform http request %s", esp_err_to_name(res));
}
ESP_ERROR_CHECK(esp_http_client_cleanup(esp_client));
}
}
6. Preparação para o desenvolvimento do miniprograma WeChat
Configure as informações do servidor, tire uma foto e faça o upload.
data: {
host: 'a0je61b5.mqtt.iot.gz.baidubce.com',
subTopic: '/light/deviceOut',
pubTopic: '/light/deviceIn',
msg: 'Hello! I am from WeChat miniprogram',
//默认显示的图片
img_url: 'https://docs.ai-thinker.com/_media/o1cn01faxszt1ls4mym2mkb_2922621297.png',
mqttOptions: {
protocolVersion: 4, //MQTT连接协议版本
clientId: 'DeviceId-jviujtntjy',
clean: true,
password: 'sM2hrD6kcRFlmIgR2F',
username: 'a0je61a/wechat',
reconnectPeriod: 1000, // 1000毫秒,两次重新连接之间的间隔
connectTimeout: 30 * 1000, // 1000毫秒,两次重新连接之间的间隔
resubscribe: true // 如果连接断开并重新连接,则会再次自动订阅已订阅的主题(默认true)
}
}
let that = this
client = mqtt.connect(`wxs://${this.data.host}/mqtt`, this.data.mqttOptions)
client.on('reconnect', (error) => {
console.log('Reconnecting...')
})
client.on('error', (error) => {
console.log('连接失败:', error)
})
client.on('connect', () => {
wx.showToast({
title: '连接成功'
})
client.subscribe(this.data.subTopic, (err) => {
})
client.on('message', (topic, payload) => {
let object = JSON.parse(payload)
//base64解码url地址
let url = that.base64_decode(object.url)
console.log(url)
that.setData({
img_url: url
})
wx.showModal({
content: `收到 Topic: ${topic}, Payload: ${url}`,
showCancel: false,
});
})
})
Download do código-fonte
Código do módulo: https://github.com/xuhongv/StudyInEsp32/tree/master/24_esp32s2_s3_camera_wechat_mini
Código do miniaplicativo WeChat: https://github.com/xuhongv/RemoteWeChatForESP
Código do servidor: consulte a seção de introdução ao código do servidor deste artigo.
Além disso, não tome meu blog como um padrão de aprendizado, os meus são apenas anotações, e é difícil ser negligente.Se houver algum, por favor, aponte-os e seja bem-vindo para deixar uma mensagem!
- Brinque
esp8266
com você, entreQQ
no grupo, amigo quem não gostar, não borrife ou adicione: 434878850 - E-mail pessoal: [email protected] 24 horas online, todos os e-mails serão respondidos!
- resumo do aprendizado do código-fonte esp8266 (atualizado continuamente, bem-vindo à estrela): https://github.com/xuhongv/StudyInEsp8266
- resumo do aprendizado do código-fonte esp32 (atualizado continuamente, bem-vindo à estrela): https://github.com/xuhongv/StudyInEsp32
- Preste atenção ao código QR da conta pública do WeChat abaixo, há muitos produtos secos e os enviaremos o mais rápido possível!