mirror of
				https://github.com/thelsing/knx.git
				synced 2025-10-26 10:26:25 +01:00 
			
		
		
		
	add bme680 example
This commit is contained in:
		
							parent
							
								
									dc362a79c3
								
							
						
					
					
						commit
						a73fa612b4
					
				
							
								
								
									
										
											BIN
										
									
								
								examples/knx-esp-bme680/bme680.knxprod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								examples/knx-esp-bme680/bme680.knxprod
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										98
									
								
								examples/knx-esp-bme680/bme680.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								examples/knx-esp-bme680/bme680.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,98 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <KNX xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" CreatedBy="KNX MT" ToolVersion="5.1.255.16695" xmlns="http://knx.org/xml/project/11"> | ||||
|   <ManufacturerData> | ||||
|     <Manufacturer RefId="M-00FA"> | ||||
|       <Catalog> | ||||
|         <CatalogSection Id="M-00FA_CS-1" Name="Geräte" Number="1" DefaultLanguage="de"> | ||||
|           <CatalogItem Id="M-00FA_H-0-0_HP-0000-0A-0000_CI-0-1" Name="BME680 BSEC" Number="1" ProductRefId="M-00FA_H-0-0_P-0" Hardware2ProgramRefId="M-00FA_H-0-0_HP-0000-0A-0000" DefaultLanguage="de" /> | ||||
|         </CatalogSection> | ||||
|       </Catalog> | ||||
|       <ApplicationPrograms> | ||||
|         <ApplicationProgram Id="M-00FA_A-0000-0A-0000" ApplicationNumber="0" ApplicationVersion="10" ProgramType="ApplicationProgram" MaskVersion="MV-57B0" Name="IP" LoadProcedureStyle="MergedProcedure" PeiType="0" DefaultLanguage="de" DynamicTableManagement="false" Linkable="false" MinEtsVersion="4.0"> | ||||
|           <Static> | ||||
|             <Code> | ||||
|               <RelativeSegment Id="M-00FA_A-0000-0A-0000_RS-04-00000" Name="Parameters" Offset="0" Size="4" LoadStateMachine="4" /> | ||||
|             </Code> | ||||
|             <ParameterTypes> | ||||
|               <ParameterType Id="M-00FA_A-0000-0A-0000_PT-Int" Name="Int"> | ||||
|                 <TypeNumber SizeInBit="32" Type="signedInt" minInclusive="0" maxInclusive="1000" /> | ||||
|               </ParameterType> | ||||
|             </ParameterTypes> | ||||
|             <Parameters> | ||||
|               <Parameter Id="M-00FA_A-0000-0A-0000_P-1" Name="Zyklisch Senden" ParameterType="M-00FA_A-0000-0A-0000_PT-Int" Text="Sendeinterval (*3s)" Value="20"> | ||||
|                 <Memory CodeSegment="M-00FA_A-0000-0A-0000_RS-04-00000" Offset="0" BitOffset="0" /> | ||||
|               </Parameter> | ||||
|             </Parameters> | ||||
|             <ParameterRefs> | ||||
|               <ParameterRef Id="M-00FA_A-0000-0A-0000_P-1_R-1" RefId="M-00FA_A-0000-0A-0000_P-1" /> | ||||
|             </ParameterRefs> | ||||
|             <ComObjectTable> | ||||
|               <ComObject Id="M-00FA_A-0000-0A-0000_O-1" Name="Temperatur (raw)" Text="Temperatur (raw)" Number="1" FunctionText="Temperaturwert lesen (raw)" ObjectSize="2 Bytes" ReadFlag="Enabled" WriteFlag="Disabled" CommunicationFlag="Enabled" TransmitFlag="Enabled" UpdateFlag="Disabled" ReadOnInitFlag="Disabled" DatapointType="" /> | ||||
|               <ComObject Id="M-00FA_A-0000-0A-0000_O-2" Name="Luftdruck" Text="Luftdruck" Number="2" FunctionText="Luftdruck lesen" ObjectSize="2 Bytes" ReadFlag="Enabled" WriteFlag="Disabled" CommunicationFlag="Enabled" TransmitFlag="Enabled" UpdateFlag="Disabled" ReadOnInitFlag="Disabled" DatapointType="" /> | ||||
|               <ComObject Id="M-00FA_A-0000-0A-0000_O-3" Name="Widerstand (Gas)" Text="Widerstand (Gas)" Number="3" FunctionText="Widerstand lesen" ObjectSize="2 Bytes" ReadFlag="Enabled" WriteFlag="Disabled" CommunicationFlag="Enabled" TransmitFlag="Enabled" UpdateFlag="Disabled" ReadOnInitFlag="Disabled" DatapointType="" /> | ||||
|               <ComObject Id="M-00FA_A-0000-0A-0000_O-4" Name="Luftfeuchtigkeit (raw)" Text="Luftfeuchtigkeit (raw)" Number="4" FunctionText="Luftfeuchtigkeit lesen (raw)" ObjectSize="2 Bytes" ReadFlag="Enabled" WriteFlag="Disabled" CommunicationFlag="Enabled" TransmitFlag="Enabled" UpdateFlag="Disabled" ReadOnInitFlag="Disabled" DatapointType="" /> | ||||
|               <ComObject Id="M-00FA_A-0000-0A-0000_O-5" Name="Luftqualität" Text="Luftqualität" Number="5" FunctionText="Luftqualität lesen" ObjectSize="2 Bytes" ReadFlag="Enabled" WriteFlag="Disabled" CommunicationFlag="Enabled" TransmitFlag="Enabled" UpdateFlag="Disabled" ReadOnInitFlag="Disabled" DatapointType="" /> | ||||
|               <ComObject Id="M-00FA_A-0000-0A-0000_O-6" Name="Genauigkeit der Luftqualität" Text="Genauigkeit der Luftqualität" Number="6" FunctionText="Genauigkeit lesen" ObjectSize="1 Byte" ReadFlag="Enabled" WriteFlag="Disabled" CommunicationFlag="Enabled" TransmitFlag="Enabled" UpdateFlag="Disabled" ReadOnInitFlag="Disabled" DatapointType="" /> | ||||
|               <ComObject Id="M-00FA_A-0000-0A-0000_O-7" Name="Temperatur" Text="Temperatur" Number="7" FunctionText="Temperatur lesen" ObjectSize="2 Bytes" ReadFlag="Enabled" WriteFlag="Disabled" CommunicationFlag="Enabled" TransmitFlag="Enabled" UpdateFlag="Disabled" ReadOnInitFlag="Disabled" DatapointType="" /> | ||||
|               <ComObject Id="M-00FA_A-0000-0A-0000_O-8" Name="Luftfeuchtigkeit" Text="Luftfeuchtigkeit" Number="8" FunctionText="Luftfeuchtigkeit lesen" ObjectSize="2 Bytes" ReadFlag="Enabled" WriteFlag="Disabled" CommunicationFlag="Enabled" TransmitFlag="Enabled" UpdateFlag="Disabled" ReadOnInitFlag="Disabled" DatapointType="" /> | ||||
|               <ComObject Id="M-00FA_A-0000-0A-0000_O-9" Name="Trigger" Text="Trigger" Number="9" FunctionText="Messung auslösen" ObjectSize="1 Bit" ReadFlag="Disabled" WriteFlag="Enabled" CommunicationFlag="Enabled" TransmitFlag="Disabled" UpdateFlag="Disabled" ReadOnInitFlag="Disabled" DatapointType="" /> | ||||
|               <ComObject Id="M-00FA_A-0000-0A-0000_O-10" Name="CO2" Text="CO2" Number="10" FunctionText="CO2 Äquivalent" ObjectSize="2 Bytes" ReadFlag="Enabled" WriteFlag="Disabled" CommunicationFlag="Enabled" TransmitFlag="Disabled" UpdateFlag="Disabled" ReadOnInitFlag="Disabled" DatapointType="" /> | ||||
|             </ComObjectTable> | ||||
|             <ComObjectRefs> | ||||
|               <ComObjectRef Id="M-00FA_A-0000-0A-0000_O-1_R-1" RefId="M-00FA_A-0000-0A-0000_O-1" /> | ||||
|               <ComObjectRef Id="M-00FA_A-0000-0A-0000_O-2_R-2" RefId="M-00FA_A-0000-0A-0000_O-2" /> | ||||
|               <ComObjectRef Id="M-00FA_A-0000-0A-0000_O-3_R-3" RefId="M-00FA_A-0000-0A-0000_O-3" /> | ||||
|               <ComObjectRef Id="M-00FA_A-0000-0A-0000_O-4_R-4" RefId="M-00FA_A-0000-0A-0000_O-4" /> | ||||
|               <ComObjectRef Id="M-00FA_A-0000-0A-0000_O-5_R-5" RefId="M-00FA_A-0000-0A-0000_O-5" /> | ||||
|               <ComObjectRef Id="M-00FA_A-0000-0A-0000_O-6_R-6" RefId="M-00FA_A-0000-0A-0000_O-6" /> | ||||
|               <ComObjectRef Id="M-00FA_A-0000-0A-0000_O-7_R-7" RefId="M-00FA_A-0000-0A-0000_O-7" /> | ||||
|               <ComObjectRef Id="M-00FA_A-0000-0A-0000_O-8_R-8" RefId="M-00FA_A-0000-0A-0000_O-8" /> | ||||
|               <ComObjectRef Id="M-00FA_A-0000-0A-0000_O-9_R-9" RefId="M-00FA_A-0000-0A-0000_O-9" /> | ||||
|               <ComObjectRef Id="M-00FA_A-0000-0A-0000_O-10_R-10" RefId="M-00FA_A-0000-0A-0000_O-10" /> | ||||
|             </ComObjectRefs> | ||||
|             <AddressTable MaxEntries="255" /> | ||||
|             <AssociationTable MaxEntries="255" /> | ||||
|             <LoadProcedures> | ||||
|               <LoadProcedure MergeId="2"> | ||||
|                 <LdCtrlRelSegment AppliesTo="full" LsmIdx="4" Size="4" Mode="0" Fill="0" /> | ||||
|               </LoadProcedure> | ||||
|               <LoadProcedure MergeId="4"> | ||||
|                 <LdCtrlWriteRelMem ObjIdx="4" Offset="0" Size="4" Verify="true" /> | ||||
|               </LoadProcedure> | ||||
|             </LoadProcedures> | ||||
|             <Options /> | ||||
|           </Static> | ||||
|           <Dynamic> | ||||
|             <ChannelIndependentBlock> | ||||
|               <ParameterBlock Id="M-00FA_A-0000-0A-0000_PB-1" Name="ParameterPage" Text="Allgemeine Parameter"> | ||||
|                 <ParameterRefRef RefId="M-00FA_A-0000-0A-0000_P-1_R-1" /> | ||||
|                 <ComObjectRefRef RefId="M-00FA_A-0000-0A-0000_O-1_R-1" /> | ||||
|                 <ComObjectRefRef RefId="M-00FA_A-0000-0A-0000_O-2_R-2" /> | ||||
|                 <ComObjectRefRef RefId="M-00FA_A-0000-0A-0000_O-3_R-3" /> | ||||
|                 <ComObjectRefRef RefId="M-00FA_A-0000-0A-0000_O-4_R-4" /> | ||||
|                 <ComObjectRefRef RefId="M-00FA_A-0000-0A-0000_O-5_R-5" /> | ||||
|                 <ComObjectRefRef RefId="M-00FA_A-0000-0A-0000_O-6_R-6" /> | ||||
|                 <ComObjectRefRef RefId="M-00FA_A-0000-0A-0000_O-7_R-7" /> | ||||
|                 <ComObjectRefRef RefId="M-00FA_A-0000-0A-0000_O-8_R-8" /> | ||||
|                 <ComObjectRefRef RefId="M-00FA_A-0000-0A-0000_O-9_R-9" /> | ||||
|                 <ComObjectRefRef RefId="M-00FA_A-0000-0A-0000_O-10_R-10" /> | ||||
|               </ParameterBlock> | ||||
|             </ChannelIndependentBlock> | ||||
|           </Dynamic> | ||||
|         </ApplicationProgram> | ||||
|       </ApplicationPrograms> | ||||
|       <Hardware> | ||||
|         <Hardware Id="M-00FA_H-0-0" Name="BME680 BSEC IP" SerialNumber="0" VersionNumber="0" HasIndividualAddress="true" HasApplicationProgram="true" IsIPEnabled="true"> | ||||
|           <Products> | ||||
|             <Product Id="M-00FA_H-0-0_P-0" Text="BME680 BSEC" OrderNumber="0" IsRailMounted="false" DefaultLanguage="de" /> | ||||
|           </Products> | ||||
|           <Hardware2Programs> | ||||
|             <Hardware2Program Id="M-00FA_H-0-0_HP-0000-0A-0000" MediumTypes="MT-5"> | ||||
|               <ApplicationProgramRef RefId="M-00FA_A-0000-0A-0000" /> | ||||
|             </Hardware2Program> | ||||
|           </Hardware2Programs> | ||||
|         </Hardware> | ||||
|       </Hardware> | ||||
|     </Manufacturer> | ||||
|   </ManufacturerData> | ||||
| </KNX> | ||||
							
								
								
									
										257
									
								
								examples/knx-esp-bme680/knx-bme680.ino
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										257
									
								
								examples/knx-esp-bme680/knx-bme680.ino
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,257 @@ | ||||
| #include <bsec.h> | ||||
| #include <knx_esp.h> | ||||
| 
 | ||||
| // declare array of all groupobjects with their sizes in byte
 | ||||
| GroupObject groupObjects[] | ||||
| { | ||||
|     GroupObject(2), | ||||
|     GroupObject(2), | ||||
|     GroupObject(2), | ||||
|     GroupObject(2), | ||||
|     GroupObject(2), | ||||
|     GroupObject(1), | ||||
|     GroupObject(2), | ||||
|     GroupObject(2), | ||||
|     GroupObject(1), | ||||
|     GroupObject(2) | ||||
| } | ||||
| ; | ||||
| 
 | ||||
| // create named references for easy access to group objects
 | ||||
| GroupObject& goRawTemperature = groupObjects[0]; | ||||
| GroupObject& goPressure = groupObjects[1]; | ||||
| GroupObject& goRawHumidity = groupObjects[2]; | ||||
| GroupObject& goGasResistance = groupObjects[3]; | ||||
| GroupObject& goIaqEstimate = groupObjects[4]; | ||||
| GroupObject& goIaqAccurace = groupObjects[5]; | ||||
| GroupObject& goTemperature = groupObjects[6]; | ||||
| GroupObject& goHumidity = groupObjects[7]; | ||||
| GroupObject& goTriggerSample = groupObjects[8]; | ||||
| GroupObject& goCo2Ppm = groupObjects[9]; | ||||
| 
 | ||||
| #define STATE_SAVE_PERIOD  UINT32_C(360 * 60 * 1000) // 360 minutes - 4 times a day
 | ||||
| 
 | ||||
| // Helper functions declarations
 | ||||
| void checkIaqSensorStatus(void); | ||||
| void errLeds(void); | ||||
| uint8_t* saveBme680State(uint8_t* buffer); | ||||
| uint8_t* loadBme680State(uint8_t* buffer); | ||||
| void triggerCallback(GroupObject& go); | ||||
| void updateState(); | ||||
| 
 | ||||
| ///const uint8_t bsec_config_iaq[304] = 
 | ||||
| //     { 0, 6, 4, 1, 61, 0, 0, 0, 0, 0, 0, 0, 24, 1, 0, 0, 40, 0, 1, 0, 137, 65, 0, 63, 0, 0, 64, 63, 205, 204, 76, 62, 0, 0, 225, 68, 0, 192, 168, 71, 0, 0, 0, 0, 0, 80, 10, 90, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 2, 0, 0, 244, 1, 225, 0, 25, 10, 144, 1, 0, 0, 112, 65, 0, 0, 0, 63, 16, 0, 3, 0, 10, 215, 163, 60, 10, 215, 35, 59, 10, 215, 35, 59, 9, 0, 5, 0, 0, 0, 0, 0, 1, 51, 0, 9, 0, 10, 215, 163, 59, 205, 204, 204, 61, 225, 122, 148, 62, 41, 92, 15, 61, 0, 0, 0, 63, 0, 0, 0, 63, 154, 153, 89, 63, 154, 153, 25, 62, 1, 1, 0, 0, 128, 63, 6, 236, 81, 184, 61, 51, 51, 131, 64, 12, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 254, 0, 2, 1, 5, 48, 117, 100, 0, 44, 1, 151, 7, 132, 3, 197, 0, 144, 1, 64, 1, 64, 1, 48, 117, 48, 117, 48, 117, 48, 117, 100, 0, 100, 0, 100, 0, 48, 117, 48, 117, 48, 117, 100, 0, 100, 0, 48, 117, 100, 0, 100, 0, 100, 0, 100, 0, 48, 117, 48, 117, 48, 117, 100, 0, 100, 0, 100, 0, 48, 117, 48, 117, 100, 0, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 44, 1, 0, 0, 0, 0, 98, 149, 0, 0 };
 | ||||
| const uint8_t bsec_config_iaq[304] =  | ||||
|      { 0, 6, 4, 1, 61, 0, 0, 0, 0, 0, 0, 0, 24, 1, 0, 0, 40, 0, 1, 0, 137, 65, 0, 63, 0, 0, 64, 63, 205, 204, 76, 62, 0, 0, 225, 68, 0, 168, 19, 73, 0, 0, 0, 0, 0, 80, 10, 90, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 2, 0, 0, 244, 1, 225, 0, 25, 10, 144, 1, 0, 0, 112, 65, 0, 0, 0, 63, 16, 0, 3, 0, 10, 215, 163, 60, 10, 215, 35, 59, 10, 215, 35, 59, 9, 0, 5, 0, 0, 0, 0, 0, 1, 51, 0, 9, 0, 10, 215, 163, 59, 205, 204, 204, 61, 225, 122, 148, 62, 41, 92, 15, 61, 0, 0, 0, 63, 0, 0, 0, 63, 154, 153, 89, 63, 154, 153, 25, 62, 1, 1, 0, 0, 128, 63, 6, 236, 81, 184, 61, 51, 51, 131, 64, 12, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 254, 0, 2, 1, 5, 48, 117, 100, 0, 44, 1, 151, 7, 132, 3, 197, 0, 144, 1, 64, 1, 64, 1, 48, 117, 48, 117, 48, 117, 48, 117, 100, 0, 100, 0, 100, 0, 48, 117, 48, 117, 48, 117, 100, 0, 100, 0, 48, 117, 100, 0, 100, 0, 100, 0, 100, 0, 48, 117, 48, 117, 48, 117, 100, 0, 100, 0, 100, 0, 48, 117, 48, 117, 100, 0, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 44, 1, 0, 0, 0, 0, 253, 222, 0, 0 }; | ||||
| 
 | ||||
| 
 | ||||
| // Create an object of the class Bsec
 | ||||
| Bsec iaqSensor; | ||||
| uint16_t stateUpdateCounter = 0; | ||||
| uint8_t sendCounter = 0; | ||||
| uint32_t cyclSend = 0; | ||||
| bool trigger = false; | ||||
| 
 | ||||
| // Entry point for the example
 | ||||
| void setup(void) | ||||
| { | ||||
|     Serial.begin(115200); | ||||
|     delay(5000); | ||||
|     Serial.println("start"); | ||||
|     // register group objects
 | ||||
|     knx.registerGroupObjects(groupObjects, 10); | ||||
| 
 | ||||
|     // read adress table, association table, groupobject table and parameters from eeprom
 | ||||
|     knx.readMemory(); | ||||
| 
 | ||||
|     // register callback for reset GO
 | ||||
|     goTriggerSample.updateHandler = triggerCallback; | ||||
|      | ||||
| 
 | ||||
|     iaqSensor.begin(BME680_I2C_ADDR_SECONDARY, Wire); | ||||
|     checkIaqSensorStatus(); | ||||
| 
 | ||||
|     iaqSensor.setConfig(bsec_config_iaq); | ||||
|     checkIaqSensorStatus(); | ||||
| 
 | ||||
|     bsec_virtual_sensor_t sensorList[7] = { | ||||
|         BSEC_OUTPUT_RAW_TEMPERATURE, | ||||
|         BSEC_OUTPUT_RAW_PRESSURE, | ||||
|         BSEC_OUTPUT_RAW_HUMIDITY, | ||||
|         BSEC_OUTPUT_RAW_GAS, | ||||
|         BSEC_OUTPUT_IAQ_ESTIMATE, | ||||
|         BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE, | ||||
|         BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY, | ||||
|     }; | ||||
| 
 | ||||
|     knx.setSaveCallback(saveBme680State); | ||||
|     knx.setRestoreCallback(loadBme680State); | ||||
|      | ||||
|     if (knx.configured()) | ||||
|     { | ||||
|         cyclSend = knx.paramInt(0); | ||||
|         Serial.printf("Zykl. send: %d\n", cyclSend); | ||||
|     } | ||||
|      | ||||
|     // start the framework. Will get wifi first.
 | ||||
|     knx.start(); | ||||
|      | ||||
|     iaqSensor.updateSubscription(sensorList, 7, BSEC_SAMPLE_RATE_LP); | ||||
|     checkIaqSensorStatus(); | ||||
|     String output = "Timestamp [ms], raw temperature [°C], pressure [hPa], raw relative humidity [%], gas [Ohm], IAQ, IAQ accuracy, temperature [°C], relative humidity [%]"; | ||||
|     Serial.println(output); | ||||
| } | ||||
| 
 | ||||
| // Function that is looped forever
 | ||||
| void loop(void) | ||||
| { | ||||
|     // don't delay here to much. Otherwise you might lose packages or mess up the timing with ETS
 | ||||
|     knx.loop(); | ||||
| 
 | ||||
|     // only run the application code if the device was configured with ETS
 | ||||
|     if(!knx.configured()) | ||||
|         return; | ||||
|      | ||||
|     if (iaqSensor.run())  | ||||
|     { | ||||
|         String output = String(millis()); | ||||
|         output += ", " + String(iaqSensor.rawTemperature); | ||||
|         output += ", " + String(iaqSensor.pressure); | ||||
|         output += ", " + String(iaqSensor.rawHumidity); | ||||
|         output += ", " + String(iaqSensor.gasResistance); | ||||
|         output += ", " + String(iaqSensor.iaqEstimate); | ||||
|         output += ", " + String(iaqSensor.iaqAccuracy); | ||||
|         output += ", " + String(iaqSensor.temperature); | ||||
|         output += ", " + String(iaqSensor.humidity); | ||||
|         Serial.println(output); | ||||
|         updateState(); | ||||
|          | ||||
|         if (sendCounter++ == cyclSend || trigger) | ||||
|         { | ||||
|             sendCounter = 0; | ||||
|             trigger = false; | ||||
|          | ||||
|             goRawTemperature.objectWrite(iaqSensor.rawTemperature); | ||||
|             goPressure.objectWrite(iaqSensor.pressure); | ||||
|             goRawHumidity.objectWrite(iaqSensor.rawHumidity); | ||||
|             goGasResistance.objectWrite(iaqSensor.gasResistance); | ||||
|             goIaqEstimate.objectWrite(iaqSensor.iaqEstimate); | ||||
|             goIaqAccurace.objectWrite(iaqSensor.iaqAccuracy); | ||||
|             goTemperature.objectWrite(iaqSensor.temperature); | ||||
|             goHumidity.objectWrite(iaqSensor.humidity); | ||||
|         } | ||||
|     } | ||||
|     else { | ||||
|         checkIaqSensorStatus(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // Helper function definitions
 | ||||
| void checkIaqSensorStatus(void) | ||||
| { | ||||
|     if (iaqSensor.status != BSEC_OK) { | ||||
|         if (iaqSensor.status < BSEC_OK) { | ||||
|             String output = "BSEC error code : " + String(iaqSensor.status); | ||||
|             Serial.println(output); | ||||
|             for (;;) | ||||
|                 errLeds(); /* Halt in case of failure */ | ||||
|         } | ||||
|         else { | ||||
|             String output = "BSEC warning code : " + String(iaqSensor.status); | ||||
|             Serial.println(output); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (iaqSensor.bme680Status != BME680_OK) { | ||||
|         if (iaqSensor.bme680Status < BME680_OK) { | ||||
|             String output = "BME680 error code : " + String(iaqSensor.bme680Status); | ||||
|             Serial.println(output); | ||||
|             for (;;) | ||||
|                 errLeds(); /* Halt in case of failure */ | ||||
|         } | ||||
|         else { | ||||
|             String output = "BME680 warning code : " + String(iaqSensor.bme680Status); | ||||
|             Serial.println(output); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void errLeds(void) | ||||
| { | ||||
|     pinMode(LED_BUILTIN, OUTPUT); | ||||
|     digitalWrite(LED_BUILTIN, HIGH); | ||||
|     delay(100); | ||||
|     digitalWrite(LED_BUILTIN, LOW); | ||||
|     delay(100); | ||||
| } | ||||
| 
 | ||||
| uint8_t* loadBme680State(uint8_t* buffer) | ||||
| { | ||||
|     // Existing state in EEPROM
 | ||||
|     Serial.println("Reading state from EEPROM"); | ||||
| 
 | ||||
|     for (uint8_t i = 0; i < BSEC_MAX_STATE_BLOB_SIZE; i++) { | ||||
|         Serial.println(buffer[i], HEX); | ||||
|     } | ||||
| 
 | ||||
|     iaqSensor.setState(buffer); | ||||
|     checkIaqSensorStatus(); | ||||
|     return buffer + BSEC_MAX_STATE_BLOB_SIZE; | ||||
| } | ||||
| 
 | ||||
| uint8_t* saveBme680State(uint8_t* buffer) | ||||
| { | ||||
|     iaqSensor.getState(buffer); | ||||
|     checkIaqSensorStatus(); | ||||
| 
 | ||||
|     Serial.println("Writing state to EEPROM"); | ||||
| 
 | ||||
|     for (uint8_t i = 0; i < BSEC_MAX_STATE_BLOB_SIZE; i++) { | ||||
|         Serial.println(buffer[i], HEX); | ||||
|     } | ||||
|     return buffer + BSEC_MAX_STATE_BLOB_SIZE; | ||||
| } | ||||
| 
 | ||||
| void updateState(void) | ||||
| { | ||||
|     bool update = false; | ||||
|     if (stateUpdateCounter == 0) { | ||||
|         /* First state update when IAQ accuracy is >= 1 */ | ||||
|         if (iaqSensor.iaqAccuracy >= 3) { | ||||
|             update = true; | ||||
|             stateUpdateCounter++; | ||||
|         } | ||||
|     } | ||||
|     else { | ||||
|         /* Update every STATE_SAVE_PERIOD minutes */ | ||||
|         if ((stateUpdateCounter * STATE_SAVE_PERIOD) < millis()) { | ||||
|             update = true; | ||||
|             stateUpdateCounter++; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (update) { | ||||
|         knx.writeMemory(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // callback from trigger-GO
 | ||||
| void triggerCallback(GroupObject& go) | ||||
| { | ||||
|     Serial.println("trigger"); | ||||
|     Serial.println(go.objectReadBool()); | ||||
|     if (!go.objectReadBool()) | ||||
|         return; | ||||
| 
 | ||||
|     trigger = true; | ||||
|     /* We call bsec_update_subscription() in order to instruct BSEC to perform an extra measurement at the next
 | ||||
|      possible time slot | ||||
|      */ | ||||
|     Serial.println("Triggering ULP plus."); | ||||
|     bsec_virtual_sensor_t sensorList[1] = { | ||||
|         BSEC_OUTPUT_IAQ_ESTIMATE, | ||||
|     }; | ||||
| 
 | ||||
|     iaqSensor.updateSubscription(sensorList, 1, BSEC_SAMPLE_RATE_ULP_MEASUREMENT_ON_DEMAND); | ||||
|     checkIaqSensorStatus(); | ||||
| } | ||||
							
								
								
									
										283
									
								
								visualstudio/knx-bme680.vgdbproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										283
									
								
								visualstudio/knx-bme680.vgdbproj
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,283 @@ | ||||
| <?xml version="1.0"?> | ||||
| <VisualGDBProjectSettings2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> | ||||
|   <ConfigurationName>Release</ConfigurationName> | ||||
|   <Project xsi:type="com.visualgdb.project.external.arduino"> | ||||
|     <CustomSourceDirectories> | ||||
|       <Directories /> | ||||
|       <PathStyle>Unknown</PathStyle> | ||||
|     </CustomSourceDirectories> | ||||
|     <ProjectModeSettings> | ||||
|       <ProjectGUID>58afeecd-06e2-4bb7-a13f-e1d5dbaed13f</ProjectGUID> | ||||
|       <GroupSourcesByTypes>true</GroupSourcesByTypes> | ||||
|       <GroupSourcesByPaths>true</GroupSourcesByPaths> | ||||
|       <SketchSubdirectory>..\examples\knx-esp-bme680</SketchSubdirectory> | ||||
|       <MainSketchFile>basic_config_state_ulp_plus.ino</MainSketchFile> | ||||
|       <RootSketchFolder> | ||||
|         <Subfolders /> | ||||
|         <Files> | ||||
|           <string>knx-bme680.ino</string> | ||||
|         </Files> | ||||
|       </RootSketchFolder> | ||||
|       <OtherFiles /> | ||||
|     </ProjectModeSettings> | ||||
|   </Project> | ||||
|   <Build xsi:type="com.visualgdb.build.external.arduino"> | ||||
|     <AdditionalLibraryDirectories> | ||||
|       <string>..</string> | ||||
|       <string>..\..</string> | ||||
|     </AdditionalLibraryDirectories> | ||||
|     <OutputSubdirectory>Output\$(PlatformName.defuse)\$(ConfigurationName.defuse)</OutputSubdirectory> | ||||
|     <EnableVerboseBuild>false</EnableVerboseBuild> | ||||
|   </Build> | ||||
|   <CustomBuild> | ||||
|     <PreSyncActions /> | ||||
|     <PreBuildActions /> | ||||
|     <PostBuildActions /> | ||||
|     <PreCleanActions /> | ||||
|     <PostCleanActions /> | ||||
|   </CustomBuild> | ||||
|   <CustomDebug> | ||||
|     <PreDebugActions /> | ||||
|     <PostDebugActions /> | ||||
|     <DebugStopActions /> | ||||
|     <BreakMode>Default</BreakMode> | ||||
|   </CustomDebug> | ||||
|   <DeviceTerminalSettings> | ||||
|     <Connection xsi:type="com.sysprogs.terminal.connection.serial"> | ||||
|       <ComPortName>COM5</ComPortName> | ||||
|       <AdvancedSettings> | ||||
|         <BaudRate>115200</BaudRate> | ||||
|         <DataBits>8</DataBits> | ||||
|         <Parity>None</Parity> | ||||
|         <StopBits>One</StopBits> | ||||
|         <FlowControl>None</FlowControl> | ||||
|       </AdvancedSettings> | ||||
|     </Connection> | ||||
|     <LastConnectionTime>0</LastConnectionTime> | ||||
|     <EchoTypedCharacters>false</EchoTypedCharacters> | ||||
|     <ClearContentsWhenReconnecting>false</ClearContentsWhenReconnecting> | ||||
|     <ReconnectAutomatically>true</ReconnectAutomatically> | ||||
|     <DisplayMode>ASCII</DisplayMode> | ||||
|     <Colors> | ||||
|       <Background> | ||||
|         <Alpha>255</Alpha> | ||||
|         <Red>0</Red> | ||||
|         <Green>0</Green> | ||||
|         <Blue>0</Blue> | ||||
|       </Background> | ||||
|       <Disconnected> | ||||
|         <Alpha>255</Alpha> | ||||
|         <Red>169</Red> | ||||
|         <Green>169</Green> | ||||
|         <Blue>169</Blue> | ||||
|       </Disconnected> | ||||
|       <Text> | ||||
|         <Alpha>255</Alpha> | ||||
|         <Red>211</Red> | ||||
|         <Green>211</Green> | ||||
|         <Blue>211</Blue> | ||||
|       </Text> | ||||
|       <Echo> | ||||
|         <Alpha>255</Alpha> | ||||
|         <Red>144</Red> | ||||
|         <Green>238</Green> | ||||
|         <Blue>144</Blue> | ||||
|       </Echo> | ||||
|       <Inactive> | ||||
|         <Alpha>255</Alpha> | ||||
|         <Red>169</Red> | ||||
|         <Green>169</Green> | ||||
|         <Blue>169</Blue> | ||||
|       </Inactive> | ||||
|     </Colors> | ||||
|     <HexSettings> | ||||
|       <MaximumBytesPerLine>16</MaximumBytesPerLine> | ||||
|       <ShowTextView>true</ShowTextView> | ||||
|       <BreaksAroundEcho>true</BreaksAroundEcho> | ||||
|       <AutoSend>true</AutoSend> | ||||
|       <SendAsHex>true</SendAsHex> | ||||
|       <TimeoutForAutoBreak>0</TimeoutForAutoBreak> | ||||
|     </HexSettings> | ||||
|     <LineEnding>LF</LineEnding> | ||||
|     <TreatLFAsCRLF>true</TreatLFAsCRLF> | ||||
|     <KeepOpenAfterExit>true</KeepOpenAfterExit> | ||||
|     <ShowAfterProgramming>true</ShowAfterProgramming> | ||||
|   </DeviceTerminalSettings> | ||||
|   <CustomShortcuts> | ||||
|     <Shortcuts /> | ||||
|     <ShowMessageAfterExecuting>true</ShowMessageAfterExecuting> | ||||
|   </CustomShortcuts> | ||||
|   <UserDefinedVariables /> | ||||
|   <ImportedPropertySheets /> | ||||
|   <CodeSense> | ||||
|     <Enabled>True</Enabled> | ||||
|     <ExtraSettings> | ||||
|       <HideErrorsInSystemHeaders>true</HideErrorsInSystemHeaders> | ||||
|       <SupportLightweightReferenceAnalysis>true</SupportLightweightReferenceAnalysis> | ||||
|       <DiscoverySettings> | ||||
|         <Mode>Enabled</Mode> | ||||
|         <SearchInProjectDir>true</SearchInProjectDir> | ||||
|         <SearchInSourceDirs>true</SearchInSourceDirs> | ||||
|         <SearchInIncludeSubdirs>true</SearchInIncludeSubdirs> | ||||
|       </DiscoverySettings> | ||||
|       <CheckForClangFormatFiles>true</CheckForClangFormatFiles> | ||||
|       <FormattingEngine xsi:nil="true" /> | ||||
|     </ExtraSettings> | ||||
|     <CodeAnalyzerSettings> | ||||
|       <Enabled>false</Enabled> | ||||
|       <SelectedAnalyzers> | ||||
|         <string>apiModeling.google.GTest</string> | ||||
|         <string>core.builtin.BuiltinFunctions</string> | ||||
|         <string>core.builtin.NoReturnFunctions</string> | ||||
|         <string>core.CallAndMessage</string> | ||||
|         <string>core.DivideZero</string> | ||||
|         <string>core.DynamicTypePropagation</string> | ||||
|         <string>core.NonnilStringConstants</string> | ||||
|         <string>core.NonNullParamChecker</string> | ||||
|         <string>core.NullDereference</string> | ||||
|         <string>core.StackAddressEscape</string> | ||||
|         <string>core.UndefinedBinaryOperatorResult</string> | ||||
|         <string>core.uninitialized.ArraySubscript</string> | ||||
|         <string>core.uninitialized.Assign</string> | ||||
|         <string>core.uninitialized.Branch</string> | ||||
|         <string>core.uninitialized.CapturedBlockVariable</string> | ||||
|         <string>core.uninitialized.UndefReturn</string> | ||||
|         <string>core.VLASize</string> | ||||
|         <string>cplusplus.NewDelete</string> | ||||
|         <string>cplusplus.NewDeleteLeaks</string> | ||||
|         <string>cplusplus.SelfAssignment</string> | ||||
|         <string>deadcode.DeadStores</string> | ||||
|         <string>nullability.NullPassedToNonnull</string> | ||||
|         <string>nullability.NullReturnedFromNonnull</string> | ||||
|         <string>security.insecureAPI.getpw</string> | ||||
|         <string>security.insecureAPI.gets</string> | ||||
|         <string>security.insecureAPI.mkstemp</string> | ||||
|         <string>security.insecureAPI.mktemp</string> | ||||
|         <string>security.insecureAPI.UncheckedReturn</string> | ||||
|         <string>security.insecureAPI.vfork</string> | ||||
|         <string>unix.API</string> | ||||
|         <string>unix.cstring.BadSizeArg</string> | ||||
|         <string>unix.cstring.NullArg</string> | ||||
|         <string>unix.Malloc</string> | ||||
|         <string>unix.MallocSizeof</string> | ||||
|         <string>unix.MismatchedDeallocator</string> | ||||
|         <string>unix.StdCLibraryFunctions</string> | ||||
|         <string>unix.Vfork</string> | ||||
|       </SelectedAnalyzers> | ||||
|       <ExtraArguments> | ||||
|         <string>-analyzer-store=region</string> | ||||
|         <string>-analyzer-opt-analyze-nested-blocks</string> | ||||
|         <string>-analyzer-eagerly-assume</string> | ||||
|       </ExtraArguments> | ||||
|     </CodeAnalyzerSettings> | ||||
|   </CodeSense> | ||||
|   <Configurations> | ||||
|     <VisualGDBConfiguration> | ||||
|       <PlatformName>NodeMCU 1 0 (ESP-12E Module)</PlatformName> | ||||
|       <DebugSettingsOverride xsi:type="com.visualgdb.debug.embedded"> | ||||
|         <AdditionalStartupCommands /> | ||||
|         <AdditionalGDBSettings> | ||||
|           <Features> | ||||
|             <DisableAutoDetection>false</DisableAutoDetection> | ||||
|             <UseFrameParameter>false</UseFrameParameter> | ||||
|             <SimpleValuesFlagSupported>false</SimpleValuesFlagSupported> | ||||
|             <ListLocalsSupported>false</ListLocalsSupported> | ||||
|             <ByteLevelMemoryCommandsAvailable>false</ByteLevelMemoryCommandsAvailable> | ||||
|             <ThreadInfoSupported>false</ThreadInfoSupported> | ||||
|             <PendingBreakpointsSupported>false</PendingBreakpointsSupported> | ||||
|             <SupportTargetCommand>false</SupportTargetCommand> | ||||
|             <ReliableBreakpointNotifications>false</ReliableBreakpointNotifications> | ||||
|           </Features> | ||||
|           <EnableSmartStepping>false</EnableSmartStepping> | ||||
|           <FilterSpuriousStoppedNotifications>false</FilterSpuriousStoppedNotifications> | ||||
|           <ForceSingleThreadedMode>false</ForceSingleThreadedMode> | ||||
|           <UseAppleExtensions>false</UseAppleExtensions> | ||||
|           <CanAcceptCommandsWhileRunning>false</CanAcceptCommandsWhileRunning> | ||||
|           <MakeLogFile>false</MakeLogFile> | ||||
|           <IgnoreModuleEventsWhileStepping>true</IgnoreModuleEventsWhileStepping> | ||||
|           <UseRelativePathsOnly>false</UseRelativePathsOnly> | ||||
|           <ExitAction>None</ExitAction> | ||||
|           <DisableDisassembly>false</DisableDisassembly> | ||||
|           <ExamineMemoryWithXCommand>false</ExamineMemoryWithXCommand> | ||||
|           <StepIntoNewInstanceEntry>main</StepIntoNewInstanceEntry> | ||||
|           <ExamineRegistersInRawFormat>true</ExamineRegistersInRawFormat> | ||||
|           <DisableSignals>false</DisableSignals> | ||||
|           <EnableAsyncExecutionMode>false</EnableAsyncExecutionMode> | ||||
|           <EnableNonStopMode>false</EnableNonStopMode> | ||||
|           <MaxBreakpointLimit>0</MaxBreakpointLimit> | ||||
|         </AdditionalGDBSettings> | ||||
|         <DebugMethod> | ||||
|           <ID>gdbstub</ID> | ||||
|           <Configuration xsi:type="com.visualgdb.edp.espxx.settings.gdbstub"> | ||||
|             <StubBaudRate>74880</StubBaudRate> | ||||
|             <BootloaderBaudRate>115200</BootloaderBaudRate> | ||||
|             <BootloaderResetDelay>50</BootloaderResetDelay> | ||||
|             <BootloaderActivationSequence>!DTR;RTS;SLEEP;DTR;!RTS;SLEEP;!DTR;SLEEP</BootloaderActivationSequence> | ||||
|             <ProgramMode>Enabled</ProgramMode> | ||||
|             <SuppressResetConfirmation>false</SuppressResetConfirmation> | ||||
|             <FLASHSettings> | ||||
|               <Size>size4M</Size> | ||||
|               <Frequency>freq40M</Frequency> | ||||
|               <Mode>QIO</Mode> | ||||
|             </FLASHSettings> | ||||
|           </Configuration> | ||||
|         </DebugMethod> | ||||
|         <AutoDetectRTOS>true</AutoDetectRTOS> | ||||
|         <SemihostingSupport>Disabled</SemihostingSupport> | ||||
|         <SemihostingPollingDelay>0</SemihostingPollingDelay> | ||||
|         <StepIntoEntryPoint>false</StepIntoEntryPoint> | ||||
|         <ReloadFirmwareOnReset>false</ReloadFirmwareOnReset> | ||||
|         <ValidateEndOfStackAddress>true</ValidateEndOfStackAddress> | ||||
|         <StopAtEntryPoint>false</StopAtEntryPoint> | ||||
|         <EnableVirtualHalts>false</EnableVirtualHalts> | ||||
|         <DynamicAnalysisSettings /> | ||||
|         <EndOfStackSymbol>_estack</EndOfStackSymbol> | ||||
|         <TimestampProviderTicksPerSecond>0</TimestampProviderTicksPerSecond> | ||||
|         <KeepConsoleAfterExit>false</KeepConsoleAfterExit> | ||||
|         <CheckInterfaceDrivers>true</CheckInterfaceDrivers> | ||||
|       </DebugSettingsOverride> | ||||
|       <BuildSettingsExtension xsi:type="com.visualgdb.build.external.arduino.extension"> | ||||
|         <BoardID>esp8266:esp8266:nodemcuv2</BoardID> | ||||
|         <COMPort>COM5</COMPort> | ||||
|         <Properties> | ||||
|           <Entries> | ||||
|             <KeyValue> | ||||
|               <Key>CpuFrequency</Key> | ||||
|               <Value>80</Value> | ||||
|             </KeyValue> | ||||
|             <KeyValue> | ||||
|               <Key>VTable</Key> | ||||
|               <Value>flash</Value> | ||||
|             </KeyValue> | ||||
|             <KeyValue> | ||||
|               <Key>FlashSize</Key> | ||||
|               <Value>4M1M</Value> | ||||
|             </KeyValue> | ||||
|             <KeyValue> | ||||
|               <Key>LwIPVariant</Key> | ||||
|               <Value>v2mss536</Value> | ||||
|             </KeyValue> | ||||
|             <KeyValue> | ||||
|               <Key>Debug</Key> | ||||
|               <Value>Serial</Value> | ||||
|             </KeyValue> | ||||
|             <KeyValue> | ||||
|               <Key>DebugLevel</Key> | ||||
|               <Value>None____</Value> | ||||
|             </KeyValue> | ||||
|             <KeyValue> | ||||
|               <Key>FlashErase</Key> | ||||
|               <Value>none</Value> | ||||
|             </KeyValue> | ||||
|             <KeyValue> | ||||
|               <Key>UploadSpeed</Key> | ||||
|               <Value>115200</Value> | ||||
|             </KeyValue> | ||||
|           </Entries> | ||||
|         </Properties> | ||||
|         <DebugUnoptimizedComponentTypes>Sketch</DebugUnoptimizedComponentTypes> | ||||
|       </BuildSettingsExtension> | ||||
|     </VisualGDBConfiguration> | ||||
|   </Configurations> | ||||
|   <ProgramArgumentsSuggestions /> | ||||
| </VisualGDBProjectSettings2> | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user