Raspberry Pi 商店是线下体验和购买 Raspberry Pi 产品的地方,还提供一些线下商店专供的独家产品。目前商店没有开通线上购买通道,仅接受线下交易。
Raspberry Pi 创始人 Eben Upton 表示,这家实体店会让更多原本会错过他们的人们认识到更容易和更便宜地学习STEM技能的重要性。 他避免将其描述为商店,而是将其描述为“陈列室”。新的Raspberry Pi商店并不打算经营传统零售业务,而更像是一个创客空间。
新的 Raspberry Pi 商店将出售电脑以及各种配件。顾客还可以在货架上找到品牌商品,如马克杯和服装。但重点还是放在为游客提供学习电子设备和编程的机会。
即使它没有收支平衡,该实验仍然有价值,Raspberry Pi 基金会将其作为与新客户互动的实验室,允许它为更广泛的人群定制其产品。
很多人好奇为什么 Raspberry Pi 基金会决定在剑桥开设旗舰零售店,人口不到125000的城市但实际上,它确实有意义。剑桥显然因其世界领先的大学而闻名。除此之外,它还是一个富裕的中产阶级城市,它也是英国科技产业的核心,也是 ARM Holdings,Infose 等公司的所在地,也是美国以外最重要的微软研究机构之一。
#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import print_function from time import sleep from sys import stdout from daqhats_utils import select_hat_device, enum_mask_to_string from daqhats import mcc118, OptionFlags, HatIDs, HatError # RGBLED import RPi.GPIO # Constants CURSOR_BACK_2 = ‘\x1b[2D’ ERASE_TO_END_OF_LINE = ‘\x1b[0K’ # RGBLED R,G,B=17,27,22 RPi.GPIO.setmode(RPi.GPIO.BCM) RPi.GPIO.setup(R, RPi.GPIO.OUT) RPi.GPIO.setup(G, RPi.GPIO.OUT) RPi.GPIO.setup(B, RPi.GPIO.OUT) pwmR = RPi.GPIO.PWM(R, 70) pwmG = RPi.GPIO.PWM(G, 70) pwmB = RPi.GPIO.PWM(B, 70) pwmR.start(0) pwmG.start(0) pwmB.start(0) def main(): “”” This function is executed automatically when the module is run directly. “”” options = OptionFlags.DEFAULT low_chan = 0 high_chan = 3 mcc_118_num_channels = mcc118.info().NUM_AI_CHANNELS sample_interval = 0.5 # Seconds light_index = 0 try: # Get an instance of the selected hat device object. address = select_hat_device(HatIDs.MCC_118) hat = mcc118(address) print(‘
MCC 118 single data value read example’) print(‘ Options:’, enum_mask_to_string(OptionFlags, options)) try: input(”
Press ‘Enter’ to continue”) except (NameError, SyntaxError): pass print(‘
Acquiring data … Press Ctrl-C to abort’) try: while True: # Read a single value from each selected channel. value = hat.a_in_read(1, options) light_index = 100 – round(value * 1000 / 50) led_display(light_index) print(‘\r{:12.5} V’.format(value), ‘\tIndex:{:5.4}’.format(light_index), end=”) stdout.flush() # Wait the specified interval between reads. sleep(sample_interval) except KeyboardInterrupt: # Clear the ‘^C’ from the display. print(CURSOR_BACK_2, ERASE_TO_END_OF_LINE, ‘
‘) except (HatError, ValueError) as error: print(‘
‘, error) pwmR.stop() pwmG.stop() pwmB.stop() RPi.GPIO.cleanup() def led_display(index): #print(index) pwmR.ChangeDutyCycle(index) pwmG.ChangeDutyCycle(index) pwmB.ChangeDutyCycle(100) if __name__ == ‘__main__’: # This will only be run when the module is called directly. main()
#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import print_function from time import sleep from sys import stdout from daqhats_utils import select_hat_device, enum_mask_to_string from daqhats import mcc118, OptionFlags, HatIDs, HatError from sakshat import SAKSHAT import time # RGBLED import RPi.GPIO #Declare the SAKS Board SAKS = SAKSHAT() # Constants CURSOR_BACK_2 = ‘\x1b[2D’ ERASE_TO_END_OF_LINE = ‘\x1b[0K’ # RGBLED R,G,B=17,27,22 RPi.GPIO.setmode(RPi.GPIO.BCM) RPi.GPIO.setup(R, RPi.GPIO.OUT) RPi.GPIO.setup(G, RPi.GPIO.OUT) RPi.GPIO.setup(B, RPi.GPIO.OUT) pwmR = RPi.GPIO.PWM(R, 70) pwmG = RPi.GPIO.PWM(G, 70) pwmB = RPi.GPIO.PWM(B, 70) pwmR.start(0) pwmG.start(0) pwmB.start(0) def main(): “”” This function is executed automatically when the module is run directly. “”” options = OptionFlags.DEFAULT low_chan = 0 high_chan = 3 mcc_118_num_channels = mcc118.info().NUM_AI_CHANNELS sample_interval = 0.5 # Seconds light_index = 0 try: # Get an instance of the selected hat device object. address = select_hat_device(HatIDs.MCC_118) hat = mcc118(address) print(‘
MCC 118 single data value read example’) print(‘ Options:’, enum_mask_to_string(OptionFlags, options)) try: input(”
Press ‘Enter’ to continue”) except (NameError, SyntaxError): pass print(‘
Acquiring data … Press Ctrl-C to abort’) SAKS.buzzer.off() try: while True: # Read a single value from each selected channel. value = hat.a_in_read(1, options) light_index = 100 – round(value * 1000 / 50) led_display(light_index) print(‘\r{:12.5} V’.format(value), ‘\tIndex:{:5.4}’.format(light_index), end=”) stdout.flush() # Wait the specified interval between reads. sleep(sample_interval) except KeyboardInterrupt: # Clear the ‘^C’ from the display. print(CURSOR_BACK_2, ERASE_TO_END_OF_LINE, ‘
‘) except (HatError, ValueError) as error: print(‘
‘, error) pwmR.stop() pwmG.stop() pwmB.stop() RPi.GPIO.cleanup() def led_display(index): #print(index) pwmR.ChangeDutyCycle(index) pwmG.ChangeDutyCycle(index) pwmB.ChangeDutyCycle(100) SAKS.digital_display.show((“##%d” % int(index))) if index < 50: SAKS.ledrow.set_row([True, True, True, True, True, True, True, True]) else: SAKS.ledrow.set_row([False, False, False, False, False, False, False, False]) if __name__ == '__main__': # This will only be run when the module is called directly. main()
六、小结
看起来在专业领域才会接触到的数据采集,实际上也可以应用在日常的 DIY 实验之中。MCC 118 这块数据采集卡配以完善的程序库和范例,是树莓派平台上很容易上手的数据采集方案。在它的帮助下,我的爱鱼也能实时感受到室外的天气变化了~
相关视频:
基于树莓派的电压采集模块MCC 118网络服务器范例
https://url.cn/utoHpkH2?sf=uri
基于树莓派的电压采集模块MCC 118数据记录仪例程
https://url.cn/VxXgwhEx?sf=uri
目前 MCC 118 扩展板可通过 Measurement Computing 公司官网购买获得 http://china.mccdaq.com。
有关本产品的相关问题和支持可以在 https://talk.quwj.com/topic/916 讨论,可获得 MCC 工程师专业的解答和技术支持。
为 Raspberry Pi 创建 Scratch 3 将分为两个步骤:首先,我们将支持MIT优化Scratch 3,以确保它在各种设备上提供最佳性能; 一旦这项工作完成,我们将为Raspberry Pi 创建一个 Scratch 3 的离线版本,包括 GPIO 引脚和 Sense HAT 的新扩展。
用树莓派做网络存储服务器(NAS)的案例有很多,我也一直在寻找用树莓派 DIY NAS 所需要的各种零部件,要求是外观漂亮、节省空间,然而一无所获。
我所看到的很多案例都是用木板粘接,集成度较低的方案,其散热性和可靠性将受到影响,想想你多年珍藏的电影资源和重要数据可能因此而丢失,这是很难以接受的。因此我决定自己做一个真正的NAS方案,它不仅外观上长得更像专业级的NAS,其内部核心部件也都是市面上买到的和专业NAS同等性能的部件。树莓派仅作为一个低功耗的主机存在,来运行 NAS 操作系统。
最初的设计草图。
在这个项目中,我不会使用任何专为树莓派 NAS 设计的部件。 相反,我将使用可以在电商平台上轻松找到的一些常见部件。 那么,开始吧!