本应用说明提供使用通过Python利用昉星光2的IIC总线,运行示例程序,以读取SHTC3数据的步骤。下图显示了40pinGPIOheader的位置: 40PinGPIOHeader定义准备:运行环境要求:Linux内核版本:Linux5。15操作系统:Debian12硬件版本:昉星光2SoC:昉惊鸿7110在执行演示程序之前,请务必准备以下硬件: 类型 MO 项目 注释 通用 M 昉星光2单板计算机 通用 M容量不低于32GB的MicroSD卡MicroSD卡读卡器计算机(WindowsMacOSLinux)USB转串口转换器(3。3VIO)网线电源适配器(5V3A)USBTypeC数据线 上述项目用于将DebianOS烧录到MicroSD上。 I2C演示 MSenseHat(B)杜邦线 注::M:必须。O:可选 以下表格和图片描述了如何将SenseHAT连接到40PinGPIOHeader上: SenseHAT(B) 40PinGPIOHeader PinNumber PinName 3V3 1hr3。3V电压 GND 9hrGND SDA 3hrGPIO58(I2CSDA) SCL 5hrGPIO57(I2CSCL) 将SenseHat(B)连接到40PinGPIOHeader上确认按照以下步骤进行操作: a。按照《昉星光2单板计算机快速参考手册》(https:doc。rvspace。orgVisionFive2PDFVisionFive2QSG。pdf)中的将OS烧录到MicroSD章节,将DebianOS烧录到MicroSD卡上。 b。登录Debian并确保昉星光2已联网。有关详细说明,请参阅《昉星光2单板计算机快速参考手册》中通过以太网使用SSH或使用USB转串口转换器章节。 c。在Debian上扩展分区,请参见《昉星光2单板计算机快速参考手册》中扩展分区章节。 d。执行以下命令,在Debian系统上安装PIP:aptgetinstallpython3pip e。在昉星光2Debian上执行pip命令,以安装VisionFive。gpio包:sudopipinstallVisionFive。gpio,或者,您也可以执行以下命令:sudopip3installVisionFive。gpio f。(可选)如果您将源代码复制到昉星光2Debian下的本地目录,请在源代码目录下执行以下命令:sudoaptgetinstallpython3devsudopythonsetup。pyinstall 提示:点击以下链接可下载源代码:https:pypi。orgprojectVisionFive。gpio。 或者,您也可以执行以下命令:sudopython3setup。pyinstall 执行以下操作,以在昉星光2的Debian系统上运行演示代码:找到测试代码I2CSenseHat。py所在的目录: a。执行以下命令以获取VisionFive。gpio所在的目录:pipshowVisionFive。gpio 示例结果:Location:usrlocallib64python3。9sitepackages 注:实际输出取决于应用的安装方式。 b。如前一步输出中所示,执行以下操作进入目录usrlocallib64python3。9sitepackages:cdusrlocallib64python3。9sitepackages c。执行以下命令进入samplecode目录:cd。VisionFivesamplecode 2。在samplecode目录下,执行以下命令以运行演示代码:sudopythonI2CSenseHat。py,或者,您也可以执行以下命令:sudopython3I2CSenseHat。py 结果:终端上输出了温湿度数据: 〔riscvfedorastarfivesamplecode〕sudopython3led。pyEnterdelay(seconds):devi2c1Temperature27。85C,Humidity56。59Temperature27。83C,Humidity56。60Temperature27。85C,Humidity56。61Temperature27。86C,Humidity56。60Temperature27。86C,Humidity56。60Temperature27。80C,Humidity56。60Temperature27。87C,Humidity56。60本演示中的资源代码仅作为参考。 I2CSenseHat。py:!usrbinpythonPleasemakesurethesenseHAT(B)isconnectedtothecorrectpins。ThefollowingtabledescribeshowtoconnecttheSenseHAT(B)tothe40pinheader。SenseHAT(B)SenseHAT(B)PinNumberPinName3V313。3VPowerGND9GNDSDA3I2CSDASCL5I2CSCLimportsysimportstructimportfcntlimportosimportmathimporttimeimportVisionFive。i2casI2CSHTC3I2CADDRESS0x70I2CSLAVE0x0703I2CDEVICEdevi2c1Commandscmddict{SHTC3WakeUp:0x3517,SHTC3Sleep:0xB098,SHTC3NMCEReadTH:0x7CA2,SHTC3NMCEReadRH:0x5C24,SHTC3NMCDReadTH:0x7866,SHTC3NMCDReadRH:0x58E0,SHTC3LMCEReadTH:0x6458,SHTC3LMCEReadRH:0x44DE,SHTC3LMCDReadTH:0x609C,SHTC3LMCDReadRH:0x401A,SHTC3SoftwareRES:0x401A,SHTC3ID:0xEFC8,CRCPOLYNOMIAL:0x131,}defSHTC3CheckCrc(data,len,checksum):crc0xffforbyteCtrinrange(0,len):crcdata〔byteCtr〕forbitinrange(8,0,1):if(crc0x80):crc(crc1)cmddict〔CRCPOLYNOMIAL〕else:crccrc1if(crc!checksum):return1else:return0defSHTC3WriteCommand(cmd):buf0(cmd8)0xffbuf1cmd0xffbuf〔buf0,buf1〕I2C。write(buf)defSHTC3WAKEUP():SHTC3WriteCommand(cmddict〔SHTC3WakeUp〕)time。sleep(0。03)defSHTC3SLEEP():SHTC3WriteCommand(cmddict〔SHTC3Sleep〕)defSHTCSOFTRESET():SHTC3WriteCommand(cmddict〔SHTC3SoftwareRES〕)time。sleep(0。03)defgetdata():time。sleep(0。02)buflistI2C。read(3)checksumbuflist〔2〕DATA0if(notSHTC3CheckCrc(buflist,2,checksum)):DATA(buflist〔0〕8buflist〔1〕)returnDATAdefSHTC3ReadDATA():SHTC3WriteCommand(cmddict〔SHTC3NMCDReadTH〕)THDATAgetdata()SHTC3WriteCommand(cmddict〔SHTC3NMCDReadRH〕)RHDATAgetdata()THDATA175THDATA65536。045。0Calculatethetemperaturevalue。RHDATA100RHDATA65536。0Calculatethehumidityvalue。DATA〔THDATA,RHDATA〕returnDATAdefgetTem():SHTC3WriteCommand(cmddict〔SHTC3NMCDReadTH〕)THDATAgetdata()THDATA175THDATA65536。045。0Calculatethetemperaturevalue。returnTHDATAdefgetHum():SHTC3WriteCommand(cmddict〔SHTC3NMCDReadRH〕)RHDATAgetdata()RHDATA100RHDATA65536。0Calculatethehumidityvalue。returnRHDATAdefmain():OpentheSenseHATbyI2C。retI2C。open(I2CDEVICE,SHTC3I2CADDRESS)if(ret0):return0SHTCSOFTRESET()i0whilei7:TempgetTem()HumgetHum()SHTC3SLEEP()SHTC3WAKEUP()print(Temperature{:。2f}C,Humidity{:。2f}。format(Temp,Hum))ii1I2C。close()return0ifnamemain:sys。exit(main())