在开发Arduino uno Q的过程里,使用bridge进行开发是最为有效的,目前官方给出的例程里给出的交互方法分为以下几种:第一是MCU作为主循环,通过call方法调用python里面的函数进行交互,第二还是MCU作为主循环,通过notify方法给python里面的函数传递参数,相当于调用这个函数,并且传递参数,这个方法无返回值,适合那种不需要返回值的调用,第三种就是MPU为主循环,MCU作为运作的部件,可惜的是,我没找到在python里得到函数返回值的方法,只能通过notify在ino里面调用,让被调用的函数承接数据,保存在全局变量里面进行其他函数的调用。注意,在开始运行的时候,python和ino程序都是并行运行的,两个程序之间级别是一样的,通过Bridge实现跨文件函数调用和参数传递,实现两个核心分工的作用。
流程图:
项目实战:
这里我们旨在实现一个在MPU运行的python上读取MCU上的数据的方法,这个方法很奇特,因为python的call方法没有后面的返回值部分,所以调用函数只可以传入参数,无法获取返回值,这里我们提供一个巧妙地方法解决这个问题,首先我们通过在mcu上运行一个循环,由于MCU和MPU的运行是独立的,所以这个循环会定时调用MPU上面的函数,通过这个函数来进行数据的存入全局变量里面,这样就实现了MCU的数据传入MPU上面,但是需要注意,由于MCU传递数据的是按照一定的时间,需要在mpu上添加逻辑判断这个数据是新的还是被处理的,否则可能会一直读取之前的数据处理,会导致一些问题。
我们通过在MPU上运行一个获取温湿度打印的demo,在MCU上面读取DHT11的温湿度数据然后给到MPU做一个案例,这样结合我第一篇文章即可实现任意处理器作为主处理器的功能来进行开发。
首先我们需要使用DHT11的库,由于Arduino的丰富的库,上手开发几乎没门槛,首先我们写好获取DHT11温湿度的函数,然后注册到Bridge里,这里我们向python里提供两个函数来保存全局变量,这样我们就可在python里“调用ino函数获取返回值”,虽然核心还是ino里面的程序调用的代码,但是实现了我们想要的效果,使用的时候注意加一个更新变量来判断是否更新。
MCU的代码设计如下:
我们首先初始化Bridge来,然后注册两个函数到Bridge,在python里只可以调用两个函数但无法获取返回值,然后我们在主循环里调用Bridge向python里的对应函数传递参数,函数名称不必和函数名相同,这里为了规范就写一样了,这样就完成了参数的传递。
Python代码见下期文章。


