আমি সবেমাত্র পিগ্পিও লাইব্রেরি ব্যবহার শুরু করেছি এবং আমি খুব মুগ্ধ হয়েছি। আমি বিশেষত বিট ব্যাং মোডটি পছন্দ করি, যেহেতু এটি আপনাকে কোনও দুটি জিপিআইও পিনকে আই 2 সি ইন্টারফেস হিসাবে ব্যবহার করতে দেয়, যতক্ষণ না তাদের কাছে পুল প্রতিরোধক রয়েছে। আপনি যদি পিআই 2 ব্যবহার করে থাকেন তবে আপনার 4 টি সিপিইউ রয়েছে বলে বিট বিং করার পক্ষে খুব একটা অসুবিধা নেই। বিট ব্যাং কমান্ডগুলির দুর্দান্ত জিনিসটি হ'ল তারা কমান্ড বাইটের "ঠিকানা, লেখার, উপাত্ত, পড়া, শুরু, থামানো" কমান্ড বাইটের একটি তালিকা নেয় যাতে আপনি একক কল দিয়ে একাধিক আই / ওএস চালাতে পারেন। এটি কেবলমাত্র আমি খুঁজে পেয়েছি যে নির্ভরযোগ্যতার সাথে পুনরাবৃত্তি শুরুর লেনদেনগুলি চালিত হয় যা অনেকগুলি ডিভাইসের দ্বারা প্রয়োজনীয় যা একটি পঠন কমান্ডের শুরুতে একটি রেজিস্টার নম্বর গ্রহণ করে। গ্রন্থাগারটি নথিভুক্ত এবং সহজেই ব্যবহারযোগ্য।
নীচে টেস্ট প্রোগ্রাম রয়েছে যা MAX31785 এ তাপমাত্রার নিবন্ধগুলি পড়ে। 4 পরবর্তী বাইটের সাথে ঠিকানা নির্ধারণ করে, 2 = শুরু করুন, 7 = লিখুন যা বাইট গণনা এবং ডেটা বাইট দ্বারা অনুসরণ করা হয়, 3 = স্টপ, 6 = পড়া যা বাইট গণনা অনুসরণ করে। কলটি বাইটের সংখ্যার সাথে পড়া কোনও ডেটা বাইট প্রদান করে।
#include <stdio.h>
#include <stdlib.h>
#include <pigpio.h>
#define MAX31785_TEMP_REG 0x8D
#define MAX31785_TEMP0 6
#define MAX31785_TEMP_INT 12
#define PAGE_REG_OFFSET 6 // Offset in CmdBuf of the page register write value
main( int argc, char *argv[])
{
int rcnt;
char ReadBuf[256];
char CmdBuf[] = {4, 0x52, // Chip address
2, 7, 2, 0x00, MAX31785_TEMP0, 3, // Write page register to select temperature sensor
2, 7, 1, MAX31785_TEMP_REG, 2, 6, 2, 3, // Read temperature register
0 // EOL
};
if (gpioInitialise() < 0) return 1;
// Open bit banging I2C on standard I2C pins
if (bbI2COpen(2, 3, 100000)) return 1;
while(1)
{
// Loop over the 7 temp sensors
for(CmdBuf[PAGE_REG_OFFSET] = MAX31785_TEMP0; CmdBuf[PAGE_REG_OFFSET] <= MAX31785_TEMP_INT; CmdBuf[PAGE_REG_OFFSET]++)
{
// Read the temp reg for the current page
rcnt = bbI2CZip(2, CmdBuf, sizeof(CmdBuf), ReadBuf, sizeof(ReadBuf));
if(rcnt == 2)
// Print out degrees C
printf("%2.1f ", (short)(((ReadBuf[1] << 8) | ReadBuf[0]) + 50)/100.0 );
else
printf("Error: %d\n", rcnt);
}
printf("\n");
fflush(stdout);
sleep(1);
}
bbI2CClose(2);
gpioTerminate();
}