拿到了DFRobot盖革计数器模块后又买了转接针,这样可以连接到ESP32板卡上进行调试。官方Arduino例程是用D3管脚连接DFRobot盖革计数器模块的D,但是ESP32开发板卡数字管脚的3与Rx pin共用不建议使用,改到14管脚进行调试。
接线说明:DFrobot Geiger模块-->ESP32 IO
(D)-->(14)
(+)-->(5V)
(-)-->(GND)
插上模块导入官方库编译下载后可以从串口读取数据。
串口输出三个数据每分钟计数CPM,辐射剂量nSv/h(纳希沃特每小时)
及μSv/h(微希沃特每小时) nSv/h × 0.001 = μSv/h。程序下载后一段时间后数据正常,本地辐射大概在0.05μSv/h左右。
每次从串口读数据有点麻烦,将OLED模块连接到ESP32开发板上,编写代码将数据显示在OLED屏幕上方便数据读取。
OLED(IIC)液晶模块-->ESP32 IO
GND-->(GND)
VCC-->(5V)
SCL-->(18)
SDA-->(23)
源代码如下:
#include <DFRobot_Geiger.h> #include "public.h" #include <Wire.h> // Only needed for Arduino 1.6.5 and earlier #include "SSD1306Wire.h" // legacy: #include "SSD1306.h" #define detect_pin 14 /*! * @brief Constructor * @param pin 外部中断引脚 */ //OLED引脚定义 #define SDA 23 #define SCL 18 SSD1306Wire display(0x3c, SDA, SCL); DFRobot_Geiger geiger(detect_pin); void setup(){ Serial.begin(115200); //开始计数,启用外部中断 geiger.start(); display.init();//初始化UI display.flipScreenVertically();//垂直翻转屏幕设置 display.setFont(ArialMT_Plain_24);//设置字体大小 display.drawString(0, 0, "Geiger Counter");//显示 display.display();//将缓存数据写入到显示器 } void loop(){ char s[5]; //开始计数,启用外部中断 //geiger.start(); delay(3000); //暂停计数,关闭外部中断触发,CPM和辐射强度值保持在暂停前状态 //geiger.pause(); //获取当前CPM,若已暂停,则CPM为暂停前最后数值 //通过3秒内的下降沿脉冲预测CPM,误差为±3CPM Serial.println(geiger.getCPM()); //获取当前nSv/h,若已暂停,则nSv/h为暂停前最后数值 Serial.println(geiger.getnSvh()); //获取当前μSv/h,若已暂停,则μSv/h为暂停前最后数值 Serial.println(geiger.getuSvh()); // clear the display display.clear(); display.setFont(ArialMT_Plain_10); display.setTextAlignment(TEXT_ALIGN_CENTER); display.drawString(64, 0, String("Geiger Counter" )); display.drawString(32, 10, String( geiger.getCPM())); display.drawString(64, 10, String( "CPM")); display.drawString(32, 20, String(geiger.getnSvh())); display.drawString(64, 20, String("nSv/h")); dtostrf(geiger.getuSvh(),1,2,s); display.drawString(32, 30, s ); display.drawString(64, 30, String("uSv/h")); // write the buffer to the display display.display(); }
下载后显示效果如下图: