perl - 使用 Perl 操作树莓派的问题
问题描述
我正在尝试使用下面的 perl 代码来检测 Raspberry Pi 湿度传感器上的湿度,并在检测到湿度时采取行动(发送电子邮件)。该代码似乎确实成功地从传感器获得了准确的读数,但是它使我的程序因错误而崩溃:
cleaned up, exiting...
original error: Can't locate object method "tid" via package "threads" at /usr/share/perl/5.28/XSLoader.pm line 111.
这是我的代码:
use strict;
use warnings;
use RPi::DHT11;
use RPi::WiringPi;
use RPi::Const qw(:all);
my $pi = RPi::WiringPi->new;
my $pin = $pi->pin(21);
my $state = $pin->read;
$pi->cleanup;
if ($state == 0) {
print "The sensor detected moisture.\n";
# send an email
my ($msg, $user, $pass) = build_message();
eval {
print "Executing in eval.\n";
my ($reply) = $msg->send('smtp','mail.rushlogistics.com',
AuthUser=>$user, AuthPass=>$pass);
print "Reply was: " . $reply . "\n"; # only prints here if there was no problems
};
} else {
print "The sensor is dry.\n";
}
在检查传感器之前在代码中早些时候发送消息可以正常工作。注释掉 my ($reply) = $msg->send 行也可以正常工作。我没有收到任何错误(当然也没有发送任何消息。)
如果我添加use threads;
我会得到以下错误:
The sensor detected moisture.
Executing in eval.
MIME::Lite::SMTP>>> MIME::Lite::SMTP
MIME::Lite::SMTP>>> Net::SMTP(3.11)
MIME::Lite::SMTP>>> Net::Cmd(3.11)
MIME::Lite::SMTP>>> Exporter(5.73)
MIME::Lite::SMTP>>> IO::Socket::IP(0.39)
MIME::Lite::SMTP>>> IO::Socket(1.39)
MIME::Lite::SMTP>>> IO::Handle(1.39)
MIME::Lite::SMTP=GLOB(0x24b01f8)<<< 220 mail42c28.carrierzone.com ESMTP Bigfoot 1.0; Fri, 15 May 2020 21:37:11 +0000
MIME::Lite::SMTP=GLOB(0x24b01f8)>>> EHLO localhost.localdomain
MIME::Lite::SMTP=GLOB(0x24b01f8)<<< 250-mail42c28.carrierzone.com Hello 63-151-32-226.dia.static.qwest.net [63.151.32.226], pleased to meet you
MIME::Lite::SMTP=GLOB(0x24b01f8)<<< 250-ENHANCEDSTATUSCODES
MIME::Lite::SMTP=GLOB(0x24b01f8)<<< 250-8BITMIME
MIME::Lite::SMTP=GLOB(0x24b01f8)<<< 250-SIZE 52428800
MIME::Lite::SMTP=GLOB(0x24b01f8)<<< 250-DSN
MIME::Lite::SMTP=GLOB(0x24b01f8)<<< 250-AUTH LOGIN CRAM-MD5
MIME::Lite::SMTP=GLOB(0x24b01f8)<<< 250-STARTTLS
MIME::Lite::SMTP=GLOB(0x24b01f8)<<< 250-DELIVERBY
MIME::Lite::SMTP=GLOB(0x24b01f8)<<< 250 HELP
cleaned up, exiting...
original error: SMTP auth() command failed: Invalid argument
mail42c28.carrierzone.com Hello 63-151-32-226.dia.static.qwest.net [63.151.32.226], pleased to meet you
ENHANCEDSTATUSCODES
8BITMIME
SIZE 52428800
DSN
AUTH LOGIN CRAM-MD5
STARTTLS
DELIVERBY
HELP
解决方案
推荐阅读
- qt - 如何将 mbtiles 转换为 .osm.pbf
- javascript - 如何编写 if 语句的第一行来测试时钟是否在点上的一个小时
- php - 如何阅读邮件正文
- vue.js - Vue js不能拖动输入类型文件
- spring-boot - Spring Mail Sender 使用 Gmail SMTP 错误。我该如何解决?
- javascript - 为什么尽管存在终止条件,但无限循环仍然存在?
- android - 无法在 MacOS 中使用 Buildozer 构建 kivy (python 2) apk [Errno 套接字错误] [SSL: TLSV1_ALERT_PROTOCOL_VERSION]
- python - Django 和 TinyMCE: NameError: name 'url' is not defined
- swift - 在 Swift 中的 ViewController 之间共享设备 CLLocation 的最佳方法是什么?
- javascript - 无渲染组件的酶浅返回未定义