Python+微信+arduino点亮你的第一盏灯

@Python+微信+arduino点亮你的第一盏灯

Python+微信+arduino点亮你的第一盏灯

站在大神的肩膀上看世界。最近在做arduino的项目,晚上突发奇想,想用Python和arduino做点东西。网上找了一些资源,花了几小时时间整合了一下,做了一个微信控制的arduino LED灯。需要的开发环境:电脑(我这里用的是Mac,Windows也差不多)、pycharm、arduino。

Python安装wxpy

安装wxpy,这里不做过多描述吧,具体方法参照官方文档https://wxpy.readthedocs.io/zh/latest/
另外强调一点,确认有没有安装正确可以在pycharm–>preference–>project interpreter里面查看或者重装Python+微信+arduino点亮你的第一盏灯_第1张图片

# -*- coding: utf-8 -*-
from wxpy import *#导入库
bot=Bot(cache_path=True)#初始化微信机器人扫码登录
myself=bot.self#搜索自己的微信号
myself.send("hello")#向自己的微信号发送hello
#消息注册,监听接收到的消息。myself为监听对象
@bot.register(myself,msg_types='Text',except_self=False)
def forward_message(msg):
    print(msg)#打印接收到的消息
embed()#阻塞线程

安装Python的串口通信库pyserial

Python与arduino通信采用串口的方式,安装pyserial同样有两种方式。
方式一、pip install pyserial
方式二、在pycharm–>preference–>project interpreter点击‘+’搜索pyserial安装。
注意,安装完这个库以后,pycharm当前工程目录下的文件名千万不能命名为serial.py不然会报错:AttributeError: module ‘serial’ has no attribute ‘Serial’
查看arduino的串口号
Python+微信+arduino点亮你的第一盏灯_第2张图片

# -*- coding: utf-8 -*-
import serial#导入库
serialPort="/dev/cu.usbmodem14101"#arduino串口号,可以在arduino IDE工具栏查看
baudRate=9600#设置波特率9600,与arduino设定波特率匹配就好
ser=serial.Serial(serialPort,baudRate,timeout=0.5)#设定串口参数
data1=b"0"#将0转换为ASCII发送
data2=b"1"#将1转换为ASCII发送
while 1:
    c = input('输入指令:')#pycharm调试窗口输入
    if (c == '开灯'):
        ser.write(data1)  # ser.write向串口中写入数据0
    elif (c == '关灯'):
        ser.write(data2) ser.write向串口中写入数据1
    else: print('erro');

完整代码

一、pycharm

# -*- coding: utf-8 -*-
import serial#导入库
from wxpy import *#导入库
bot=Bot(cache_path=True)#初始化微信机器人扫码登录
myself=bot.self#搜索自己的微信号
friend=bot.friends()
myself.send("hello")#向自己的微信号发送hello
serialPort="/dev/cu.usbmodem14101"
baudRate=9600
ser=serial.Serial(serialPort,baudRate,timeout=0.5)
print("参数设置:串口=%s ,波特率=%d" % (serialPort, baudRate))
data1=b"0"#将0转换为ASCII发送
data2=b"1"#将1转换为ASCII发送
@bot.register(friend,msg_types='Text',except_self=False)
def forward_message(msg):
    print(msg)
    if (msg.text == '关灯'):
        ser.write(data1)  # ser.write在于向串口中写入数据
    elif (msg.text == '开灯'):
        ser.write(data2)
    else:print('erro')
while 1:
    c = input('请输入指令:')
    if (c == '关灯'):
        ser.write(data1)  # ser.write在于向串口中写入数据
    elif (c == '开灯'):
        ser.write(data2)
    else: print('erro');
embed()

二、arduino

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(13, OUTPUT);//设置13号端口作为输出端口
  digitalWrite(13, HIGH); //让灯开始时亮
}
char var;
void loop() {
  while (Serial.available() > 0) //当有信号的时候
  {
    var = Serial.read();
    if (var == '0') //传过来的是0
      digitalWrite(13, LOW);
    if (var == '1') //传过来的是1
      digitalWrite(13, HIGH);
  }
}

参考
[1]:https://wxpy.readthedocs.io/zh/latest/
[2]:https://www.cnblogs.com/lanceyu/p/10201236.html

你可能感兴趣的:(我的小实验)