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

php 网站建设 教学用jsp做的汽车网站

php 网站建设 教学,用jsp做的汽车网站,做seo网站标题用什么符号,网站正在开发中在咱们地磁传感器里的开发板#xff1a; 开发板上的地磁传感器型号是QMC5883L#xff0c;它也是使用I2C与ESP32通信#xff0c;I2C地址为0X0D。这个项目#xff0c;我们使用地磁传感器QMC5883L计算方位角#xff0c;最终#xff0c;把开发板放平到桌子上#xff0c;旋转…在咱们地磁传感器里的开发板 开发板上的地磁传感器型号是QMC5883L它也是使用I2C与ESP32通信I2C地址为0X0D。这个项目我们使用地磁传感器QMC5883L计算方位角最终把开发板放平到桌子上旋转开发板一周输出0~359°的数值到串口终端 在这个项目里我们首先写的是编写QMC5883L驱动程序我们还是使用sample project作为模板我们复制esp-idf-v5.1.3\examples\get-started\sample_project这个工程到我们的实验文件夹然后把这个文件夹的名称修改为azimuthazimuth是方位角的意思哈在VSCode软件然后打开azimuth文件夹 第一步还像我们往常一样我们先打开azimuth工程目录下的CMakeList.txt文件修改工程的名称为azimuth然后保存关闭此文件 project(azimuth) 在这个项目中我们需要用到I2C通信现在我们把温湿度例程里面的myi2c.h和myi2c.c文件复制到Attitude工程中的main目录下这个是在电脑上完成复制和粘贴 我们点开main目录下的CMakeLists.txt文件可以看到myi2c.c文件已经添加到编译路径然后我们在main目录下新建2个文件分别是qmc5883l.c和qmc5883l.h文件 idf_component_register(SRCS myi2c.c main.cINCLUDE_DIRS .) 然后我们再点开main目录下的CMakeLists.txt文件确认一下qmc5883l.c文件有没有被添加到路径 idf_component_register(SRCS qmc5883l.c myi2c.c main.cINCLUDE_DIRS .) 点击打开qmc5883l.h文件在最上面添加#pragma once #pragma once 点击打开qmc5883l.c文件在最上面添加包含qmc5883l.h文件 #include qmc5883l.h 点击打开main.c文件添加头文件 #include myi2c.h #include qmc5883l.h 在app_main函数中先调用I2C初始化函数 void app_main(void) {ESP_ERROR_CHECK(i2c_master_init());ESP_LOGI(TAG, I2C initialized successfully); } 函数里使用到了ESP_LOGI需要包含esp_log.h头文件 #include esp_log.h 还需要给ESP_LOGI里面的TAG定义一下 static const char *TAG MAIN; 接下来开始写qmc5883l的驱动函数我们先写两个读取qmc5883l寄存器的函数和写入qmc5883l寄存器的函数。写入函数用于配置传感器的参数读取函数用于读取传感器的寄存器数据例如ID号状态等。把这两个函数放到qmc5883l.c文件中 esp_err_t qmc5883L_register_read(uint8_t reg_addr, uint8_t *data, size_t len) {return i2c_master_write_read_device(I2C_MASTER_NUM, QMC5883L_SENSOR_ADDR, reg_addr, 1, data, len, I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); } //该函数返回一个 esp_err_t 类型的错误码表示操作是否成功,reg_addr: 要读取的寄存器地址,data: 用于存储读取数据的缓冲区指针,len: 要读取的数据长度字节数 //i2c_master_write_read_device 函数实现读取操作;I2C_MASTER_NUM: I2C总线编号 //QMC5883L_SENSOR_ADDR: QMC5883L传感器的I2C地址;reg_addr: 要读取的寄存器地址 //1: 寄存器地址的长度1字节;data: 用于存储读取数据的缓冲区指针 //len: 要读取的数据长度字节数;I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS: I2C操作的超时时间esp_err_t qmc5883L_register_write_byte(uint8_t reg_addr, uint8_t data)//该函数返回一个 esp_err_t 类型的错误码表示操作是否成功;reg_addr: 要写入的寄存器地址;data: 要写入寄存器的数据 {uint8_t write_buf[2] {reg_addr, data};return i2c_master_write_to_device(I2C_MASTER_NUM, QMC5883L_SENSOR_ADDR, write_buf, sizeof(write_buf), I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); } //i2c_master_write_to_device 函数实现写入操作;I2C_MASTER_NUM: I2C总线编号 //QMC5883L_SENSOR_ADDR: QMC5883L传感器的I2C地址;write_buf: 包含寄存器地址和数据的缓冲区 //write_buf[0] reg_addr: 寄存器地址;write_buf[1] data: 要写入的数据 //sizeof(write_buf): 缓冲区的长度2字节;I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS: I2C操作的超时时间然后我们在qmc5883l.c文件中添加这两个函数需要的头文件 #include driver/i2c.h #include myi2c.h 函数里面用到了QMC5883L_SENSOR_ADDR我们在qmc5883l.h文件中定义一下 #define QMC5883L_SENSOR_ADDR 0x0D 接下来我们需要写一个qmc5883l初始化函数用于读取ID号配置加速度、陀螺仪范围等参数。这个函数涉及到了qmc5883l的寄存器所以我们先用枚举类型定义寄存器放到qmc5883l.h文件中 enum qmc5883l_reg {QMC5883L_XOUT_L,QMC5883L_XOUT_H,QMC5883L_YOUT_L,QMC5883L_YOUT_H,QMC5883L_ZOUT_L,QMC5883L_ZOUT_H,QMC5883L_STATUS,QMC5883L_TOUT_L,QMC5883L_TOUT_H,QMC5883L_CTRL1,QMC5883L_CTRL2,QMC5883L_FBR,QMC5883L_CHIPID 13 }; 结合QMC5883L的数据手册中的寄存器定义表格写出这个枚举定义。枚举类型的第一个值默认是0和寄存器XOUT_L的地址一样所以不用标出然后依次递增遇到地址不连续的寄存器地址时单独标出最后的结果如上代码所示 接下来写qmc5883l初始化函数到qmc5883l.c文件 void qmc5883l_init(void) {uint8_t id 0; //用于存储从传感器读取的ID值qmc5883L_register_read(QMC5883L_CHIPID, id ,1); //读取QMC5883L传感器的ID寄存器并将结果存储在 id 变量中while (id ! 0xff) // 确定ID号是否正确{vTaskDelay(1000 / portTICK_PERIOD_MS); //延迟1000毫秒1秒然后再次读取IDqmc5883L_register_read(QMC5883L_CHIPID, id ,1); //再次读取ID寄存器}ESP_LOGI(TAG, QMC5883L OK!); //如果ID值正确等于0xff打印一条信息表示传感器初始化成功qmc5883L_register_write_byte(QMC5883L_CTRL2, 0x80); // 复位芯片 vTaskDelay(10 / portTICK_PERIOD_MS); //延迟10毫秒等待复位完成qmc5883L_register_write_byte(QMC5883L_CTRL1, 0x05); //Continuous模式 50Hz qmc5883L_register_write_byte(QMC5883L_CTRL2, 0x00); //向控制寄存器2写入0x00清除复位标志qmc5883L_register_write_byte(QMC5883L_FBR, 0x01); //向滤波器带宽寄存器写入0x01配置滤波器带宽 } 初始化函数里面首先读取qmc5883l的ID号如果不正确就继续读如果正确往下执行。确定qmc5883l没有问题先复位芯片然后进行配置。CTRL1配置成了连续采集模式输出速率50Hz。CTRL2可以用来配置是否复位以及数据读取方式。FBR寄存器数据手册推荐写入0x01 函数里面用到了ESP_LOGI用来输出信息这里的TAG需要定义。我们把这个TAG定义放到qmc5883l.c文件中的包含头文件的下面 static const char *TAG QMC5883L; 函数里面使用了freeRTOS的延时函数所以需要包含freeRTOS头文件放到qmc5883l.c文件中 #include freertos/FreeRTOS.h #include freertos/task.h 函数里面也用到了ESP_LOGI所以还需要添加log头文件 #include esp_log.h 现在我们把这个函数的声明写到qmc5883l.h文件 extern void qmc5883l_init(void); 接下来我们在main.c文件中的app_main函数中调用这个初始化函数 void app_main(void) {ESP_ERROR_CHECK(i2c_master_init());ESP_LOGI(TAG, I2C initialized successfully);qmc5883l_init(); }
http://www.hkea.cn/news/14486842/

相关文章:

  • 聊城企业网站建设魔兽做宏网站
  • 站群cms网站系统10个著名摄影网站
  • 用dw做网站怎么上传到网站上室内设计学校专业
  • 品牌查询网站二手的家具哪个网站做的好
  • 阿里云企业建站教程四川自助网站
  • 手机网站开发算什么费用建立个人网站的方法
  • 网站谁做的营销类网站建设
  • 如何配置 网站二级域名菏泽城乡建设局官网
  • 南京网站设计开发公司网站后台如何上传视频
  • 哈尔滨网站建设资海诚聘网站开发
  • 做个人网站怎么赚钱免费做网站
  • 发卡网站怎么做外链代发2分一条
  • 个人做外贸的网站有哪些网页制作模板源代码免费
  • 南宁企业建站系统上海58同城官网
  • 网站开发怎么兼容浏览器陆家网站建设
  • wordpress建站专家wordpress小清新模板
  • 如何做网站内链建立网站涉及到哪些企业
  • 龙岗营销网站建设公司wordpress后台禁止更新
  • 乌鲁瓦提建设管理局网站全球工业设计公司排名
  • 网站开发专业就业指导广西住房与建设厅网站
  • 免费网站空间申请大型网站开发项目书籍
  • 全景网站如何做泉州企业网站建设
  • 婚纱摄影网站设计理念甘肃兰州天气预报15天
  • 如何通过网站标题找网站药剂学教学网站的建设
  • 企业网站的建设意义ppt软件下载免费版
  • 家具企业网站模板网站建设服务哪便宜
  • 在线A视频网站l一级A做爰片龙岗龙城街道网站建设
  • 东莞企业怎么做网站建设vs sql server网站开发
  • 太原制作手机网站wordpress改插件
  • 品牌商城网站制作wordpress 悬停 图片 文字