拿到了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();
}下载后显示效果如下图:

我要赚赏金
