个人作品——桌面精灵(1)

​ 基于STM32单片机以STM32F103C8T6为核心控制配备ESP32运行FreeRtos,搭载LD3322,以实现通过WiFi协议技术实现HTTP协议制作网页界面和语音控制来实现桌面摆件的互动性和开关对应摆件功能,例如风扇、灯、雾化器以及MP3播放功能,同时通过SSD1603驱动IC和DHT11测量当前温度并显示在OLED上。

硬件方面:

​ 主控:STM32F103C8T6

​ 语音模块:LD3322

​ WIFI模块:ESP32

​ MP3模块:MY2490

​ 以及一些其他的模块,硬件方面的连接这里先不做讲解,后续慢慢补充。

软件方面:

​ 工具:Keil、Arduino IDE、智能公元(LD3322编写平台)

整体方案:

软件实现步骤:

智能公元

​ 在这个平台可以进行对LD3322进行配置,详细的配置效果如下

​ 通过配置识别语音之后,发送串口信息给主控芯片,从而进行后续的操作,对于如何操作、配置可以去入手LD3322,官方会给予详细的操作指南。

STM32代码部分截取

​ 实现串口通信代码:

 if(USART2_RX_STA&(1<<15)) { USART2_RX_STA&=~(1<<15);switch(USART2_RX_BUF[0]){case 0x11:OLED_Clear();delay_ms(100);OLED_DrawBMP(45,1,85,6,Atomizer);WU=1;break;case 0x12:OLED_Clear();WU=0;break;case 0x13:OLED_Clear();delay_ms(100);OLED_ShowString(0,2,"Open the fan",32);FAN=1;break;case 0x14:OLED_Clear();FAN=0;break;case 0x15:LED=1;OLED_Clear();delay_ms(100);ledon =1;ledonsecond =1;OLED_DrawBMP(45,1,93,7,LED);break;  case 0x16:LED=0;ledonsecond =0;OLED_Clear();break;case 0x17:UART3SendByte5(tt[0],tt[1],tt[2],tt[3],tt[4]);OLED_DrawBMP(55,1,80,6,col);break;case 0x18:    UART3SendByte5(tt2[0],tt2[1],tt2[2],tt2[3],tt2[4]);OLED_Clear();break;case 0x19:    UART3SendByte5(tt1[0],tt1[1],tt1[2],tt1[3],tt1[4]);OLED_DrawBMP(55,1,80,6,col);break;case 0x21: ESP32RESET = 1;esp32status =1;break;default:break;}USART2_RX_STA=0;}

​ 代码中详细区分了不同的串口信息,STM32将执行不同的操作。可以进行LED、雾化器、风扇的开关以及MP3的音乐控制。

​ 其中挑选几个封装函数进行讲解:

​ 1.UART3SendByte5(tt1[0],tt1[1],tt1[2],tt1[3],tt1[4]):串口发送5个字节的数据,详细代码如下:

unsigned char tt[]={0x7E,0X03,0X11,0x12,0xEF};//播放
unsigned char tt1[]={0x7E,0X03,0X13,0x10,0xEF};//下一首
unsigned char tt2[]={0x7E,0X03,0X1C,0x1F,0xEF};//暂停void UART3SendByte(unsigned char SendData)
{      USART_SendData(USART3,SendData);while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
} void UART3SendByte5(unsigned char SendData1,unsigned char SendData2,unsigned char SendData3,unsigned char SendData4,unsigned char SendData5)
{UART3SendByte(SendData1);UART3SendByte(SendData2);UART3SendByte(SendData3);UART3SendByte(SendData4);UART3SendByte(SendData5);
}

​ 简单的串口发送,封装发送五个字节的串口函数,使得MP3发生不同的操作。

​ 2.OLED_Clear()、void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])、void OLED_ShowString(u8 x,u8 y,u8 chr[],u8 Char_Size)这类函数就是OLED显示屏的相关函数

void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
{   unsigned int j=0;unsigned char x,y;if(y1%8==0) y=y1/8;      else y=y1/8+1;for(y=y0;y<y1;y++){OLED_Set_Pos(x0,y); for(x=x0;x<x1;x++){      OLED_WR_Byte(BMP[j++],OLED_DATA);}}
}

​ OLED_DrawBMP():通过不同的位置信息摆放图像的位置,最后一个参数即为图片,代码中有Atomizer、LED这类的图片,由于没有找到满意的风扇图片,这里就显示字符串,字符串的相关代码如下:

void OLED_ShowString(u8 x,u8 y,u8 chr[],u8 Char_Size)
{unsigned char j=0;while (chr[j]!='\0'){        OLED_ShowChar(x,y,chr[j],Char_Size); x+=8;if(x>120){x=0;y+=2;}j++;}
}

​ 其他的一些初始化部分代码如下:

 int esp32status = 0;int esp32count = 0;Gpio();delay_init();            //延时函数初始化    NVIC_Configuration();      //中断分组USART2_Init(9600);   //串口2初始化与LD3322连接USART3_Init(9600); //串口3初始化与MY240连接delay_ms(1000);OLED_Init();OLED_Clear();OLED_Display_On();
```在这里插入图片描述

到这里,第一部分的讲解以完成,接下来请阅读第二部分。

个人作品——桌面精灵(1)相关推荐

  1. QT之桌面精灵实现(一) --- 透明窗体和图片绘制

    关于QT种种,之前已经吐槽过了,打算写几篇记录一下桌面精灵的制作过程,不过由于是过了挺长时间才想要写,所以之前的一些东西都忘得差不多了,总之想起多少写多少. 桌面精灵的第一步,就是要把一个精灵渲染到桌 ...

  2. JAVA桌面精灵演示版

    近来闲的慌,看见C#或C++写的桌面精灵是不是心理痒痒,JAVA能写不?在我这里回答是:能 当然程序还有点bug,背景处理有问题,这个和系统的刷新率有关....以后再研究... 没啥特别的功能,就是隐 ...

  3. 桌面计算机1008桌面计算机,windows桌面精灵

    windows桌面精灵是一款鼠标键盘动作录制工具,可以自动录制和自定义录制. 功能特色: 一键智能录制键盘鼠标动作 一次智能录制键盘鼠标动作,让桌面精灵为您卖力的重复这这些枯燥的重复操作吧. 超简单自 ...

  4. vnc远程桌面精灵,细数3款vnc远程桌面精灵

    VNC 是在基于UNIX 和LINUX 操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和Windows 和 MAC中的任何远程控制软件媲美,那在进行vnc远程桌面时,有哪些好用的vn ...

  5. vs+qt实现简单桌面精灵

    开篇先放成果(桌面精灵用的图片皆为网上的图片,后准备自己做一下) 可以实现获取在桌面的位置,产生相应的变化,比如用鼠标将他拖到电脑屏幕边缘,会吸附到电脑边缘(其实就是换了一张图片,对窗口进行一些操作, ...

  6. mmd导入的桌面精灵:unity(转载)

    之前想做一个桌面精灵,就上网查了一下.发现各位前辈真强大.我就搬运搬运: 首先我先在网上找到了一下模型和舞蹈动作数据,mmd的. 网站是:mmd模型和动作数据 然后我们再去下载一个mmd转换成fbx的 ...

  7. windows/linux桌面精灵(带源码)

    效果图: 代码实现逻辑: 桌面上展示的动画均为gif无背景动图(可以下载一套指定模型的gif图),通过监听键盘的输入或者鼠标的点击拖拽,来实现动画的切换,在切换时,通过播放控制器来实现动画正常的切换, ...

  8. 如何制作具有声音效果的动画桌面精灵

    如何制作具有声音效果的动画桌面精灵 作者:徐景周 下载实例代码:http://www.csdn.net/cnshare/soft/7/7085.shtm http://www.csdn.net/cns ...

  9. PyQt5桌面应用开发(11):摸鱼也要讲基本法之桌面精灵

    本文目录 PyQt5桌面应用系列 鼠标不要钱,手腕还不要钱吗? PyQt5源程序 python文件 资源定义 界面定义文件 技术要素 资源文件 StyleSheets QMainWindow设置 窗体 ...

最新文章

  1. 关于JVM和Dalvik的区别
  2. jQuery 3.0的domManip浅析
  3. stm32使用rtc到底用LSI还是LSE
  4. Centos 6.5 64位双网卡绑定
  5. css之px自动转rem—sublime 插件CSSREM
  6. multipartfile前端怎么传_前端那些事如何更好管理 Api 接口
  7. 4.2 One-Shot 学习
  8. c语言中tail和head的用法,tail 与head用法
  9. Android Studio快捷键-mac版
  10. SimpleXML php 解析xml 的方法
  11. tp框架-----Model模型层
  12. 通信协议(二)——SPI协议
  13. 【转】TabHost详解
  14. 微信小程序入门级教程一
  15. 寻星计划|Apache Doris 社区4月职位广场,IDG资本、Shopee 多个岗位
  16. 计算机u盘启动进不去怎么办,U盘启动盘怎么进不了PE系统 该如何解决
  17. IP地址的组成及简单分类
  18. wireshark分析无线wifi包
  19. mx4usb计算机连接在哪,魅族 MX4 开启USB调试模式
  20. 英特尔CAS缓存加速软件优化SSD性能

热门文章

  1. ref和reactive区别
  2. oracle10漏洞补丁下载,Oracle漏洞修复工具
  3. mediaplayer网络播放错误
  4. 2016终端服务器配置,2016服务器的安装与配置.ppt
  5. DSP280049代码迁移DSP280039注意事项
  6. encodeURI、encodeURIComponent的区别
  7. 推荐五款免费且优质的自学网站,你值得拥有
  8. 目前有哪些好用的用例管理工具?
  9. 在银行存一年钱最多可以得到多少利息?
  10. 算法题:分苹果(2016京东招聘笔试题)