arduino wemos D1 SPI与HT7038通信

以下博客只实现了HT7038的计量寄存器的读取,校表寄存器的写入是存在问题的。没有删除的目的是保留波形图和实际串口输出图。

完整程序请参考 “arduino Wemos D 1HT7038调试笔记”

https://blog.csdn.net/armcsdn/article/details/103294388

先上可以执行代码

#include <SPI.h>
#include <BlynkSimpleEsp8266.h>
BlynkTimer timer;
#define HT7038_CS  D8
#define rDeviceID  0x00  //7038 Device ID  
#define rChipID    0x5d  //芯片版本指示器0X7026E0
void SPIsendData()
{
    Serial.print("rDeviceID=0x");
    Serial.println(Read7038(rDeviceID),HEX);
    Serial.print("  rChipID=0x");
    Serial.println(Read7038(rChipID),HEX);
 }
 void HT7038_init()
{
  digitalWrite(HT7038_CS, LOW);
  Write7038(0xD3,0X000000);//软件复位
  digitalWrite(HT7038_CS, HIGH);
}
unsigned long Read7038(unsigned char rCmd)
{
  unsigned long buffer=0;
  unsigned char dataLength=3;
  unsigned char byteIndex=0 ;
  unsigned char receiveBuffer = 0;
  digitalWrite(HT7038_CS, LOW);
  SPI.transfer(rCmd); //发送命令
    //接收从站返回数据,SPI.transfer(0)一次带回1个byte数据
    while(byteIndex < dataLength)
    {
      receiveBuffer = SPI.transfer(0);
      buffer = (buffer << 8) + receiveBuffer;
      byteIndex++;
    }
  digitalWrite(HT7038_CS, HIGH);
  return buffer;
}
void Write7038(unsigned char wCmd,unsigned long Dat)
{
  long send;
  //32大端转小端原理
  send = ((Dat>>24)&0xff) | // move byte 3 to byte 0
         ((Dat<<8)&0xff0000) | // move byte 1 to byte 2
         ((Dat>>8)&0xff00) | // move byte 2 to byte 1
         ((Dat<<24)&0xff000000); // byte 0 to byte 3
  SPI.transfer(wCmd); 
  SPI.transfer(&send,4);
}
void setup() 
{
   Serial.begin(115200);
   pinMode(HT7038_CS,OUTPUT);
   digitalWrite(HT7038_CS, HIGH);
   SPI.begin();
   SPI.setClockDivider(SPI_CLOCK_DIV32);//时钟32分频,SPI时钟250kHz
   SPI.setDataMode(SPI_MODE1);// 仅SPI_MODE1才可以接收到从站数据,其余模式均无法收到数据 SPI_MODE0 SPI_MODE2和SPI_MODE3无效
   SPI.setBitOrder(MSBFIRST);
   HT7038_init();
   timer.setInterval(1000L, SPIsendData);
}

void loop() {
 timer.run();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

armcsdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值