<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel rdf:about="https://community.wolfram.com">
    <title>Community RSS Feed</title>
    <link>https://community.wolfram.com</link>
    <description>RSS Feed for Wolfram Community showing any discussions tagged with Raspberry Pi sorted by active.</description>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/558199" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3578728" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3578212" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3577991" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3444192" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3558969" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3558592" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3558367" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3465203" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3147950" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/802967" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/497883" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/477658" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3252066" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1057588" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/503296" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3169401" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3155725" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3140560" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3103515" />
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/558199">
    <title>Return of the &amp;#034;Product Activation&amp;#034; Dialog</title>
    <link>https://community.wolfram.com/groups/-/m/t/558199</link>
    <description>In a [previous thread](http://community.wolfram.com/groups/-/m/t/444854), it has been noted that if a user on a Raspberry Pi is not a member of the video group, the user will not be able to use *Mathematica* and instead will be stuck in an inescapable Product Activation dialog.  It&amp;#039;s a weird error that results from the way Wolfram ensures that their (in this case, free) software is running on the RPi (or so I&amp;#039;ve heard).&#xD;
&#xD;
I have run in to the same problem, although this time, it is not due to the groups issue mentioned earlier.  I am confident that it is the product activation issue, since I am able to get around it via `sudo wolfram`.  The problem came up in a very foolish way.  I have multiple RPi&amp;#039;s on my desk, and typically access them through SSH terminals on my main PC.  I just purchased the 3.5&amp;#034; PiTFT from Adafruit and put that on one of the RPi&amp;#039;s.  When following their installation routine, which requires a modified kernel, I accidentally entered all the commands on my non PiTFT RPi.  It was then that I noticed that *Mathematica* no longer worked on the RPi.  &#xD;
&#xD;
I&amp;#039;ve tried adding new users, running `dpkg reconfigure wolfram-engine` and am now ready to revert back to an older backup.  I&amp;#039;d like to exhaust my troubleshooting options, however, before I go that route.&#xD;
&#xD;
**To make a long story short** are there other checks similar to the video user-group that can be shared so that I (hopefully no one is stupid enough to repeat this error to make it a &amp;#039;we&amp;#039;) can get my (non sudo&amp;#039;ed) wolfram back?</description>
    <dc:creator>BoB LeSuer</dc:creator>
    <dc:date>2015-09-03T01:27:12Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3578728">
    <title>[WTC25] Wolfram &amp;amp; Raspberry Pi 5 &amp;#x2014; Part 3: neural networks, image processing and physics simulations</title>
    <link>https://community.wolfram.com/groups/-/m/t/3578728</link>
    <description>![Wolfram &amp;amp; Raspberry Pi 5 &amp;#x2014; Part 3: neural networks, image processing and physics simulations][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=WolframandRaspberryPi5Part3.png&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/375d99eb-3120-4500-8340-2335d618812a</description>
    <dc:creator>Bart ter Haar Romeny</dc:creator>
    <dc:date>2025-11-20T18:57:58Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3578212">
    <title>[WTC25] Wolfram &amp;amp; Raspberry Pi 5 &amp;#x2014; Part 2: compilation and mathematical visualization</title>
    <link>https://community.wolfram.com/groups/-/m/t/3578212</link>
    <description>![Wolfram &amp;amp; Raspberry Pi 5 &amp;#x2014; Part 2: compilation and mathematical visualization][1]&#xD;
&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Complilationandmathematicalvisualization.png&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/79e1b917-7c75-49f9-8759-e92375c40c34</description>
    <dc:creator>Bart ter Haar Romeny</dc:creator>
    <dc:date>2025-11-19T19:56:59Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3577991">
    <title>[WTC25] Wolfram &amp;amp; Raspberry Pi 5 &amp;#x2014; Part 1: STEM lab setup and real-time data</title>
    <link>https://community.wolfram.com/groups/-/m/t/3577991</link>
    <description>![Wolfram &amp;amp; Raspberry Pi 5 &amp;#x2014; Part 1: STEM lab setup and real-time data][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=STEMlabsetupandreal-timedata.png&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/e7ca3b71-26d7-44dc-b53d-dca49aba9f6e</description>
    <dc:creator>Bart ter Haar Romeny</dc:creator>
    <dc:date>2025-11-19T19:28:05Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3444192">
    <title>Help new install Mathematica on Raspberry Pi 5</title>
    <link>https://community.wolfram.com/groups/-/m/t/3444192</link>
    <description>Team, I am very rusty on this one. I have been about 4 years away and returning to a new RB Pi 5.o.&#xD;
The problem is that I do not know how to get started with installation of Mathematica.&#xD;
&#xD;
I downloaded an Installation script. But from here I am lost. I click the file, but only opens a text file with a code. Can not get to go any further.</description>
    <dc:creator>Jose Calderon</dc:creator>
    <dc:date>2025-04-14T23:29:40Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3558969">
    <title>Realtime rendering of fast swimming Jellyfish on Raspberry Pi 5</title>
    <link>https://community.wolfram.com/groups/-/m/t/3558969</link>
    <description>![enter image description here][1]&#xD;
&#xD;
&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=1136jellyfish-optimize.gif&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/c6f98f70-9500-43f0-9efd-3c2a919ec8a2</description>
    <dc:creator>Bart ter Haar Romeny</dc:creator>
    <dc:date>2025-10-10T14:23:00Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3558592">
    <title>Wolfram &amp;amp; Raspberry Pi 5: complete STEM applications, advanced visualizations &amp;amp; GPIO sensor support</title>
    <link>https://community.wolfram.com/groups/-/m/t/3558592</link>
    <description>![Wolfram &amp;amp; Raspberry Pi 5: Complete STEM applications, advanced visualizations &amp;amp; GPIO sensor support][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=STEMstudent%27sdream.png&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/37751904-8fa2-44eb-a492-7983fdc9dcd8</description>
    <dc:creator>Bart ter Haar Romeny</dc:creator>
    <dc:date>2025-10-09T17:30:45Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3558367">
    <title>Mathematica won’t install on Trixie 64bit</title>
    <link>https://community.wolfram.com/groups/-/m/t/3558367</link>
    <description>Hello  &#xD;
I tried using the shell script from wolfram website to install 14.2 on Trixie  &#xD;
Didn’t work due to failed dependencies…  &#xD;
So I downloaded these two pkgs manually from ftp.debian.org  &#xD;
libprec3_8.39-13_arm64.deb;   &#xD;
libwayland-egl1-mesa-22.3.6-1+deb12u1_arm64.deb  &#xD;
And after installing them, I can proceed with the installation…  &#xD;
Any suggestions if there is a better way?</description>
    <dc:creator>Ed Wong</dc:creator>
    <dc:date>2025-10-09T02:29:04Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3465203">
    <title>Raspberry Pi 5 Mathematica doesn&amp;#039;t start</title>
    <link>https://community.wolfram.com/groups/-/m/t/3465203</link>
    <description>I&amp;#039;m a newbie. I installed Mathematica on my Raspberry Pi 5, running Linux (version 6.12.25+rpt-rpi-2712). When I access it via RealVNC with a screen size of 1280 x 1024, the loading whirlpool appears, but after 20 seconds, nothing happens.  Where are the error logs?  Any suggesion? Mathematica problem or should blame Vnc?  Thanks in advance</description>
    <dc:creator>Emine Simsek</dc:creator>
    <dc:date>2025-05-21T09:16:17Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3147950">
    <title>Mathematica 13.3.1 installed on Raspberry Pi 5 does not support interaction with BasicMathAssistant</title>
    <link>https://community.wolfram.com/groups/-/m/t/3147950</link>
    <description>My new Raspberry Pi 5 runs the latest version of Raspberry OS (64-bit with the full set of applications) created by Raspberry Pi imager 1.8.5. Mathematica 13.3.1 is ialso nstalledll. It works properly with symbolically taped functions and operators but does not insert symbols clicked on panels of BasicMathAssistent into the notebook window.  &#xD;
What is the matter?      &#xD;
PS. There is no such problem with the same version of Mathematica installed on my Raspberry Pi 4 with previous version of 64-bit OS.</description>
    <dc:creator>Vladimir Rok</dc:creator>
    <dc:date>2024-03-26T15:34:57Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/802967">
    <title>HackUPC: BarcelonaTech&amp;#039;s Hackathon</title>
    <link>https://community.wolfram.com/groups/-/m/t/802967</link>
    <description>Awesome. That&amp;#039;s my one-word summary of [HackUPC][1] this past weekend. Seeing 400 international students take the initiative to turn dreams into reality was an inspiring experience for me and my twin brother [@Jofre Espigule][at0].&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
**Friday&amp;#039;s night opening ceremony at the Sports Pavilion of *Universitat Politècnica de Catalunya*.**&#xD;
&#xD;
![Opening Talk][3]&#xD;
&#xD;
Hack UPC took place in UPC&amp;#039;s North Campus in sunny Barcelona. And it was made possible thanks to [Miquel Llobet][4] (founder of Hack UPC), the [Major League Hacking][5], the sponsors (Wolfram, Skyscanner, Everis,...), and an amazing team of volunteers. Here are the [TravelDirections][6] to Hack UPC:&#xD;
&#xD;
![HackUPC venue][7]&#xD;
&#xD;
Jofre and I got some cool Wolfram swag to give away. We also demoed a bunch of code examples to people interested in the the [Wolfram Language][8]. And we helped several teams that came to us with great ideas. Below is one of the hacks I demoed there, a &amp;#034;Weather Station in a Snap&amp;#034; similar to [@Arnoud Buzing][at1] Arduino Yún [weather station][9] but using the new [Sense HAT][10] for the [Raspberry Pi][11].&#xD;
&#xD;
    hat = DeviceOpen[&amp;#034;SenseHAT&amp;#034;];&#xD;
    bin = CreateDatabin[];&#xD;
    RunScheduledTask[DatabinAdd[bin,&amp;lt;|&amp;#034;temp&amp;#034; -&amp;gt; DeviceRead[hat, &amp;#034;Temperature&amp;#034;], &amp;#034;hum&amp;#034; -&amp;gt; DeviceRead[hat, &amp;#034;Humidity&amp;#034;], &amp;#034;pres&amp;#034; -&amp;gt; DeviceRead[hat, &amp;#034;Pressure&amp;#034;]|&amp;gt;], 120]&#xD;
&#xD;
![Weather Station][12]&#xD;
&#xD;
Temperature, humidity and pressure measurements were being added in a regular basis at this databin: https://wolfr.am/aDkxtY91.&#xD;
&#xD;
Now let&amp;#039;s take a look at some great Wolfram projects done by students at Hack UPC. The first project that I want to share with you was about cryptography. And it was carried out by two students, Xavier Perranau and Arnau Bordas. Right after signing in to [WOLFRAM DEVELOPMENT PLATFORM][13] they got familiarized with functions covered in the WLanguage Guide about [Cryptographic Number Theory][14]. Their next step consisted in developing a cloud service to allow users send encrypted messages. And after some trial and errors, they ended up adapting the example [Hide Secret Messages in Images][15] from the [WL Code Gallery][16]. They called their project [Steganography a la Wolfram][17] which allows users to drag and drop an image in two cloud-deployed [FormFunction][18] to wether hide a text message on it or decipher a message previously inserted in the image.&#xD;
&#xD;
Here is how it works. A function called **InsertSecretMessage** is defined to insert a string into a photo:&#xD;
&#xD;
    InsertSecretMessage[carrierImage_Image, mesg_] := &#xD;
      Block[{carrierBytes, pixelChannels, secretBits, secretBytes}, &#xD;
       carrierBytes = BitAnd[ImageData[carrierImage, &amp;#034;Byte&amp;#034;], 254];secretBits = Flatten[IntegerDigits[ToCharacterCode[ToString[mesg, InputForm, CharacterEncoding -&amp;gt; &amp;#034;ASCII&amp;#034;]], 2, 8]]; &#xD;
        secretBytes = Fold[Partition, PadRight[Join[IntegerDigits[Length[secretBits], 2, 48], secretBits], Times @@ Dimensions[carrierBytes]], &#xD;
          Reverse[Rest[Dimensions[carrierBytes]]]]; Image[carrierBytes + secretBytes, &amp;#034;Byte&amp;#034;]]&#xD;
&#xD;
Then, an [advanced FormFunction][19] with four fields named &amp;#034;Message&amp;#034;,&amp;#034;Image&amp;#034;,&amp;#034;ByEmail&amp;#034; and &amp;#034;SendTo&amp;#034; is cloud-deployed with the **InsertSecretMessage** function added inside a conditional to see if the user wants to send the image by email with [SendMail][20] or just generate it on the Wolfram Cloud:&#xD;
&#xD;
     CloudDeploy[FormFunction[{&amp;#034;Message&amp;#034;-&amp;gt;&amp;#034;String&amp;#034;,&amp;#034;Image&amp;#034;-&amp;gt;&amp;#034;Image&amp;#034;,&amp;#034;ByEmail&amp;#034;-&amp;gt;{True,False}, &#xD;
    &amp;#034;SendTo&amp;#034;-&amp;gt;&amp;lt;|&amp;#034;Interpreter&amp;#034;-&amp;gt;&amp;#034;EmailAddress&amp;#034;,&amp;#034;Input&amp;#034;-&amp;gt;&amp;#034;nomail@exemple.com&amp;#034;|&amp;gt;},&#xD;
    If[#ByEmail==True,SendMail[#SendTo,{&amp;#034;Email from Wolfram&amp;#034;,InsertSecretMessage[#Image,#Message]}],InsertSecretMessage[#Image,#Message]]&amp;amp;,&#xD;
    AppearanceRules-&amp;gt;&amp;lt;|&amp;#034;Title&amp;#034;-&amp;gt;&amp;#034;Wolfram Steganography Insertion&amp;#034;,&amp;#034;Description&amp;#034;-&amp;gt;&amp;#034;Insert your plaintext message here and we will add it to the image of your choice.&amp;#034;|&amp;gt;,&#xD;
    FormTheme-&amp;gt;&amp;#034;Black&amp;#034;],&amp;#034;insert&amp;#034;,Permissions-&amp;gt;&amp;#034;Public&amp;#034;]&#xD;
&#xD;
https://www.wolframcloud.com/objects/user-bb7ad2a9-a624-45e5-a867-8da9c0832887/insert&#xD;
&#xD;
![insert][21]&#xD;
&#xD;
To get back the previously given string, an **ExtractSecretMessage** function is declared and inserted in the following simple [FormFunction][22].&#xD;
&#xD;
    ExtractSecretMessage[img_Image] :=Block[{secretData, messageLength},&#xD;
      secretData = Flatten[BitAnd[ImageData[img, &amp;#034;Byte&amp;#034;], 1]];&#xD;
      messageLength = FromDigits[Take[secretData, 48], 2];&#xD;
      secretData = Partition[Drop[secretData, 48], 8];&#xD;
      ToExpression[ FromCharacterCode[FromDigits[#, 2] &amp;amp; /@ Take[secretData, messageLength]]] ]&#xD;
&#xD;
    CloudDeploy[FormFunction[&amp;#034;Image&amp;#034;-&amp;gt;&amp;#034;Image&amp;#034;,ExtractSecretMessage[#Image]&amp;amp;,&#xD;
    AppearanceRules-&amp;gt;&amp;lt;|&amp;#034;Title&amp;#034;-&amp;gt;&amp;#034;Wolfram Steganography Extraction&amp;#034;,&amp;#034;Description&amp;#034;-&amp;gt;&amp;#034;Insert your image here and you will get the Text&amp;#034;|&amp;gt;, &#xD;
    FormTheme-&amp;gt;&amp;#034;Black&amp;#034;],&amp;#034;extract&amp;#034;,Permissions-&amp;gt;&amp;#034;Public&amp;#034; ]&#xD;
&#xD;
https://www.wolframcloud.com/objects/user-bb7ad2a9-a624-45e5-a867-8da9c0832887/extract&#xD;
&#xD;
![extract][23]&#xD;
&#xD;
The project awarded with the **Skyscanner Prize** was [GrooveScanner][24]: *quality events on a budget because planning just got easy*. A project developed by a group of polish students that consisted in building a service that searches for cheapest most convenient flight and nearest accommodation to the venue requested. What makes it unique is the combination of Skyscanner API and [Wolfram Alpha API for Transportation][25]. &#xD;
&#xD;
![GrooveScanner][26]&#xD;
![WA airports][27]&#xD;
&#xD;
**Finally, the project that won the Best Use of Wolfram Tech Award was** .... [DriveFlyTeleport][28]! *Sightseeing: The Smart Way*. Given three main constrains which are: time, money and the topics a person is interested in, the system determines which places in the area (museums, monuments, places of interest in general) are the best fit. It uses a [Wolfram Cloud API][29] and a twitter handle of any given user to get the text content from his timeline and analyze it to see which of the travel options may fit him best: https://github.com/adamszewe/HackUPC-Wolfram&#xD;
&#xD;
![DriveFlyTeleport][30]&#xD;
&#xD;
 Congratulations to all HackUPC participants for coming up with such amazing projects! &#xD;
&#xD;
http://hackupc2016.devpost.com/submissions&#xD;
&#xD;
 [at0]: http://community.wolfram.com/web/jofreep&#xD;
&#xD;
&#xD;
 [at1]: http://community.wolfram.com/web/arnoudb&#xD;
&#xD;
&#xD;
 [at2]: http://community.wolfram.com/web/sherlock&#xD;
&#xD;
&#xD;
  [1]: http://hackupc2016.devpost.com/&#xD;
  [2]: http://community.wolfram.com//c/portal/getImageAttachment?filename=CbmzybPWwAAN8rk.jpg&amp;amp;userId=56204&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Opening.jpg&amp;amp;userId=56204&#xD;
  [4]: https://twitter.com/mllobet&#xD;
  [5]: https://mlh.io/&#xD;
  [6]: https://reference.wolfram.com/language/ref/TravelDirections.html&#xD;
  [7]: http://community.wolfram.com//c/portal/getImageAttachment?filename=CbleDr1VIAEiXw7.png&amp;amp;userId=56204&#xD;
  [8]: http://www.wolfram.com/language/&#xD;
  [9]: http://blog.wolfram.com/2015/03/17/build-your-own-weather-station-in-a-snap-with-the-wolfram-cloud/&#xD;
  [10]: http://reference.wolfram.com/language/ref/device/SenseHAT.html&#xD;
  [11]: http://www.wolfram.com/raspberry-pi/&#xD;
  [12]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Weather.png&amp;amp;userId=56204&#xD;
  [13]: https://www.wolfram.com/development-platform/&#xD;
  [14]: http://reference.wolfram.com/language/guide/CryptographicNumberTheory.html&#xD;
  [15]: https://www.wolfram.com/language/gallery/hide-secret-messages-in-images/&#xD;
  [16]: https://www.wolfram.com/language/gallery/&#xD;
  [17]: http://devpost.com/software/steganography-a-la-wolfram&#xD;
  [18]: http://reference.wolfram.com/language/ref/FormFunction.html&#xD;
  [19]: http://reference.wolfram.com/language/tutorial/AdvancedWebFormCreation.html&#xD;
  [20]: https://reference.wolfram.com/language/ref/SendMail.html&#xD;
  [21]: http://community.wolfram.com//c/portal/getImageAttachment?filename=insert.png&amp;amp;userId=56204&#xD;
  [22]: http://reference.wolfram.com/language/ref/FormFunction.html&#xD;
  [23]: http://community.wolfram.com//c/portal/getImageAttachment?filename=extract.png&amp;amp;userId=56204&#xD;
  [24]: http://devpost.com/software/groovescanner&#xD;
  [25]: https://www.wolframalpha.com/examples/Transportation.html&#xD;
  [26]: http://community.wolfram.com//c/portal/getImageAttachment?filename=1939grooveScanner.jpg&amp;amp;userId=56204&#xD;
  [27]: http://community.wolfram.com//c/portal/getImageAttachment?filename=WA_airport_info.jpg&amp;amp;userId=56204&#xD;
  [28]: http://devpost.com/software/driveflyteleport&#xD;
  [29]: https://reference.wolfram.com/language/guide/CreatingAnInstantAPI.html&#xD;
  [30]: http://community.wolfram.com//c/portal/getImageAttachment?filename=DriveFlyTeleport.jpg&amp;amp;userId=56204</description>
    <dc:creator>Bernat Espigulé</dc:creator>
    <dc:date>2016-02-25T18:07:31Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/497883">
    <title>Controlling a GSM module with the Wolfram Language</title>
    <link>https://community.wolfram.com/groups/-/m/t/497883</link>
    <description>In this post I show how to send and receive SMS messages using a GSM module connected to a Raspberry Pi computer.&#xD;
This enables the development of applications in the R-Pi which can be controlled remotely with a cell phone or any other device connected to a cellular network.  &#xD;
&#xD;
Material needed:&#xD;
&#xD;
 1. The R-Pi computer (I used R-Pi model B+)&#xD;
&#xD;
 2. [SIM908 GSM][1] module (see the attached notebook for a complete description of the module and how it is connected to the R-Pi)&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
The way in which the module works is by sending commands as text strings over the serial port. The module responds to these commands in a way which we can read by retrieving the buffer data of the serial port, as we illustrate below. The structure of the comand is &amp;#034;AT+some_instruction&amp;#034;. The complete list of commands and their meanings can be found in the module manual. In this example we shall only explain the commands which we need.&#xD;
&#xD;
The module is attached to the serial port of the R-Pi computer. We use DeviceOpen to be able to write and read data on this port:&#xD;
&#xD;
    serial = DeviceOpen[&amp;#034;Serial&amp;#034;, {&amp;#034;/dev/ttyAMA0&amp;#034;, &amp;#034;BaudRate&amp;#034; -&amp;gt; 115200}]&#xD;
&#xD;
Commands are sent by means of strings ended  with the character \r is which is added to indicate the &amp;#034;carriage return&amp;#034; (if the commands were typeset with a computer keyboard then this is just the enter key). For example the simplest command is the string &amp;#034;AT \r&amp;#034; which we send with DeviceWrite. &#xD;
 &#xD;
&#xD;
    DeviceWrite[serial, &amp;#034;AT\r&amp;#034;]&#xD;
&#xD;
The answer of the module is stored in binary form in the device buffer and we use DeviceReadBuffer as shown:&#xD;
&#xD;
    FromCharacterCode@DeviceReadBuffer[serial]&#xD;
&#xD;
The structure of this answer is similar for all commands: the module returns the command entered and, if the command was successfully executed, the module response followed by the value &amp;#034;OK&amp;#034;. If the command cannot be executed (for example due to a syntax error) the module returns &amp;#034;ERROR&amp;#034; instead of &amp;#034;OK&amp;#034;.&#xD;
&#xD;
Next we enter the PIN number of the SIM card in the module. This is done as follows (replace **** by your own PIN number. Remember that entering the wrong PIN at least 3 times will block your SIM card.  ) &#xD;
&#xD;
    DeviceWrite[serial, &amp;#034;AT+CPIN=****\r&amp;#034;];&#xD;
    FromCharacterCode@DeviceReadBuffer[serial]&#xD;
&#xD;
## Sending a SMS ##&#xD;
&#xD;
 First of all we set the SMS mode to text&#xD;
&#xD;
    DeviceWrite[serial, &amp;#034;AT+CMGF=1\r&amp;#034;];&#xD;
    FromCharacterCode@DeviceReadBuffer[serial]&#xD;
We insert the phone number the SMS is going to be sent to (the number used here is fictitious, you need to replace this number by your own cell phone destination).&#xD;
&#xD;
    DeviceWrite[serial, &amp;#034;AT+CMGS=\&amp;#034;11192522\&amp;#034;\r&amp;#034;];&#xD;
    FromCharacterCode@DeviceReadBuffer[serial]&#xD;
&#xD;
The &amp;#034;&amp;gt;&amp;#034; which you see in the response is the prompt which confirms that we can start typing the SMS text. We send the SMS text to the serial port:&#xD;
&#xD;
    DeviceWrite[serial, &amp;#034;Sent from my RPi&amp;#034;];&#xD;
    FromCharacterCode@DeviceReadBuffer[serial]&#xD;
Once finished with the typing we need to send the key combination Ctrl-Z to indicate it. Ctrl-Z corresponds to the hex code 0x1A which in base 10 is the number 26:&#xD;
&#xD;
    DeviceWrite[serial, FromCharacterCode[{26}]] ;&#xD;
    FromCharacterCode@DeviceReadBuffer[serial]&#xD;
The module response should confirm that the SMS was sent. In my case this response reads +CMGS: 124 followed by OK. After some time the message will be received by the recipient&amp;#039;s phone.&#xD;
&#xD;
## Reading a SMS from the SIM card ##&#xD;
&#xD;
Again we choose the SMS tex mode:&#xD;
&#xD;
    DeviceWrite[serial, &amp;#034;AT+CMGF=1\r&amp;#034;];&#xD;
&#xD;
Next we select the SIM card memory to read the messages in&#xD;
&#xD;
    DeviceWrite[serial, &amp;#034;AT+CPMS=\&amp;#034;SM\&amp;#034;,\&amp;#034;SM\&amp;#034;,\&amp;#034;SM\&amp;#034;\r&amp;#034;];&#xD;
    FromCharacterCode@DeviceReadBuffer[serial]&#xD;
&#xD;
In my case the output is a list of the form +CPMS: 3,40,3,40,3,40. This means that there are 3 messages stored of a maximum storage capacity of 40 messages (see the module documentation to find out why 3 memories &amp;#034;SM&amp;#034; are reported). We read the third message (adapt this to the output you got in the previous step)&#xD;
&#xD;
    DeviceWrite[serial, &amp;#034;AT+CMGR=3\r&amp;#034;];&#xD;
    FromCharacterCode@DeviceReadBuffer[serial]&#xD;
&#xD;
In addition to the SMS message text, the module returns the sender&amp;#039;s phone number (in this example the number is fictitious), the sending date and time and the message status &amp;#034;REC UNREAD&amp;#034; which means that the message wasn&amp;#039;t read before. We can import the SMS text with ImportString&#xD;
&#xD;
    ImportString[%, &amp;#034;Table&amp;#034;]&#xD;
    %[[-3]]&#xD;
&#xD;
&#xD;
  [1]: http://www.cooking-hacks.com/gprs-gps-quadband-module-for-arduino-sim908&#xD;
  [2]: /c/portal/getImageAttachment?filename=20150518_100159.jpg&amp;amp;userId=11733</description>
    <dc:creator>Alfonso Garcia-Parrado</dc:creator>
    <dc:date>2015-05-16T18:05:07Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/477658">
    <title>Communicating with the ATMega328p microcontroller via Wolfram/RPi</title>
    <link>https://community.wolfram.com/groups/-/m/t/477658</link>
    <description>See full video here: https://youtu.be/OLVH-2cFiGg  &#xD;
![enter image description here][1]&#xD;
&#xD;
So, my desk is getting pretty cluttered; on one side of the desk sits a pile of ungraded papers; on the other side of the desk a pile of unopened static-protection envelopes of integrated circuits. At the moment, I felt like I needed to call for help - to send out a distress signal. That reminded me of my younger years when I would watch my Dad in front of his amateur radio setup. I never learned Morse code and was always impressed with his ability to communicate across the world with dits and dahs. The trip down memory lane got me thinking about a mini-project that would help me learn about programming microcontrollers and allow me to procrastinate on the grading just a little bit more.&#xD;
&#xD;
I have at my disposal a Raspberry Pi (model B) and the ATMega328p microcontroller. I don&amp;#039;t have a programmer for the microcontroller so I need the RPi to do that. Fortunately, there are a number of resources around the web to help out with this setup. I could point you to a bunch of links (and here they are to keep me honest, [1](http://pi.gadgetoid.com/article/building-the-pico-piduino), [2](http://pi.gadgetoid.com/article/programming-your-pico-piduino) and [3](http://raspberryalphaomega.org.uk/2014/06/15/build-an-arduino-on-a-raspberry-pi/) ), but I&amp;#039;ll also walk through the process as well, because it bothered me that I had to do a whole bunch of web searching, to find these bits and pieces. Better to do it all in one place.&#xD;
&#xD;
Hardware setup&#xD;
--------------&#xD;
&#xD;
Below is a fritzing diagram of my setup. Note that I have a very minimal microcontroller configuration. I make no attempt to either optimize or protect the microcontroller. It is running off of the 3.3V line of the RPi and I will program it through the SPI interface and communicate with it through the serial UART interface. I use one of the digital out pins to power the LED.&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
RPi setup&#xD;
---------&#xD;
&#xD;
I needed to do a few things here. First, some software. To program the microcontroller, I am using avrdude, which is installed by doing this:&#xD;
&#xD;
&amp;lt;!-- language: lang-sh--&amp;gt;&#xD;
&#xD;
    sudo apt-get install arduino&#xD;
    wget http://project-downloads.drogon.net/gertboard/avrdude_5.10-4_armhf.deb&#xD;
    sudo dpkg -i avrdude_5.10-4_armhf.deb&#xD;
    sudo chmod 4755 /usr/bin/avrdude&#xD;
&#xD;
&#xD;
It&amp;#039;ll also be important to tell your RPi that you plan to use the UART for your own purposes; the default behavior is to allow console acess throught the TX/RX lines. You can disable this behavior easily through `raspi-config` under the advanced options.&#xD;
&#xD;
There are a number of not-so-obvious but straightforward steps that need to be performed to complete the microcontroller setup. First, in any folder in which you will be creating a project, you&amp;#039;ll need a `makefile` which looks something like this:&#xD;
&#xD;
    ARDUINO_DIR=/usr/share/arduino&#xD;
    BOARD_TAG = bob&#xD;
    ARDUINO_PORT = /dev/ttyAMAO&#xD;
    ARDUINO_LIBS = include /usr/share/arduino/Arduino.mk&#xD;
&#xD;
&#xD;
The big difference is going to be the 2nd line. I called my microcontroller &amp;#034;bob&amp;#034; and he has a profile that is very similar to the profile for the &amp;#034;uno&amp;#034; microcontroler except for one minor difference; &amp;#034;bob&amp;#034; has a much lower clock frequency. One reason for this is because I forgot to buy a 16 MHz crystal when I bought the ATMega328p. The 2nd is that I want to make sure that the microcontroller is not drawing too much current from the RPi, so I keep it running only as fast as I need it to. Essentially, I modified the file&#xD;
&#xD;
    /usr/share/arduino/hardware/arduino/boards.txt&#xD;
&#xD;
to contain an additional entry that looks just like the one for uno except that the symbol names are prefixed with bob instead of uno and the CPU line is 1000000L.&#xD;
&#xD;
We should be good to go at this point, and can check to see if that is true by doing&#xD;
&#xD;
    avrdude -p m328p -c gpio&#xD;
&#xD;
Code&#xD;
----&#xD;
&#xD;
I made a file called morse.ino, which looks a lot like c with some additional libraries to make writing to and reading from the microcontroller&amp;#039;s pins a bit easier.&#xD;
&#xD;
&amp;lt;!-- language: lang-c--&amp;gt;&#xD;
&#xD;
    #define LED 7&#xD;
    #define DAH 300&#xD;
    #define DIT 150&#xD;
    #define CPAUSE 100&#xD;
&#xD;
    void setup(){&#xD;
         Serial.begin(9600);&#xD;
         Serial.setTimeout(1);&#xD;
         pinMode(LED, OUTPUT);&#xD;
    }&#xD;
    &#xD;
    void loop (){&#xD;
        if (Serial.available()) {&#xD;
             char ser = Serial.read();&#xD;
             switch (ser) {&#xD;
                 case &amp;#039;.&amp;#039;:&#xD;
                     digitalWrite(LED, HIGH);&#xD;
                     delay(DIT);&#xD;
                     digitalWrite(LED, LOW);&#xD;
                     delay(CPAUSE);&#xD;
                     break;&#xD;
                 case &amp;#039;-&amp;#039;:&#xD;
                     digitalWrite(LED, HIGH);&#xD;
                     delay(DAH);&#xD;
                     digitalWrite(LED,LOW);&#xD;
                     delay(CPAUSE);&#xD;
                     break;&#xD;
                 case &amp;#039; &amp;#039;:&#xD;
                     delay(3*CPAUSE);&#xD;
                     break;&#xD;
             } &#xD;
         }&#xD;
    }&#xD;
&#xD;
&#xD;
We can compile this by typing make and then flash the microcontroller with&#xD;
&#xD;
    avrdude -p m328p -c gpio -e -U flash:w:build-cli/morse.hex&#xD;
&#xD;
Wolfram&#xD;
-------&#xD;
&#xD;
&amp;lt;!-- language: lang-mma--&amp;gt; &#xD;
&#xD;
Now let&amp;#039;s hop on over to wolfram to make sure everything is working. We can open the serial device with&#xD;
&#xD;
    dev = DeviceOpen[&amp;#034;Serial&amp;#034;,&amp;#034;/dev/ttyAMA0&amp;#034;]&#xD;
&#xD;
and after having flashed the microcontroller with the code above, sending a &amp;#034;.&amp;#034; or &amp;#034;-&amp;#034; will cause the led on pin 7 to blink.&#xD;
&#xD;
    DeviceWrite[dev,&amp;#034;.&amp;#034;]&#xD;
&#xD;
Lastly, I created a small Mathematica package that contains a couple functions to convert a string of alphanumeric text into morse code and fires that off to the microcontroller: (I grabbed the morse code symbol from [this source](http://mathematica.stackexchange.com/q/66267/7167)).&#xD;
&#xD;
    BeginPackage[&amp;#034;ArduinoMorse`&amp;#034;]&#xD;
    &#xD;
    morsecode::usage = &amp;#034;List of rules to convert characters to morse code&amp;#034;&#xD;
    createMorseString::usage = &amp;#034;Converts a string of characters to morse code&amp;#034;&#xD;
    blinkMorseString::usage = &amp;#034;Blinks morse code&amp;#034;&#xD;
    &#xD;
    Begin[&amp;#034;`Private`&amp;#034;]&#xD;
    &#xD;
    morsecode = (#1 -&amp;gt; Characters[#2]) &amp;amp; @@@ {&#xD;
     {&amp;#034;a&amp;#034;, &amp;#034;.-&amp;#034;}, {&amp;#034;b&amp;#034;, &amp;#034;-...&amp;#034;}, {&amp;#034;c&amp;#034;, &amp;#034;-.-.&amp;#034;},&#xD;
     {&amp;#034;d&amp;#034;, &amp;#034;-..&amp;#034;}, {&amp;#034;e&amp;#034;, &amp;#034;.&amp;#034;}, {&amp;#034;f&amp;#034;, &amp;#034;..-.&amp;#034;},&#xD;
     {&amp;#034;g&amp;#034;, &amp;#034;--.&amp;#034;}, {&amp;#034;h&amp;#034;, &amp;#034;....&amp;#034;}, {&amp;#034;i&amp;#034;, &amp;#034;..&amp;#034;},&#xD;
     {&amp;#034;j&amp;#034;, &amp;#034;.---&amp;#034;}, {&amp;#034;k&amp;#034;, &amp;#034;-.-&amp;#034;}, {&amp;#034;l&amp;#034;, &amp;#034;.-..&amp;#034;},&#xD;
     {&amp;#034;m&amp;#034;, &amp;#034;--&amp;#034;}, {&amp;#034;n&amp;#034;, &amp;#034;-.&amp;#034;}, {&amp;#034;o&amp;#034;, &amp;#034;---&amp;#034;},&#xD;
     {&amp;#034;p&amp;#034;, &amp;#034;.--.&amp;#034;}, {&amp;#034;q&amp;#034;, &amp;#034;--.-&amp;#034;}, {&amp;#034;r&amp;#034;, &amp;#034;.-.&amp;#034;},&#xD;
     {&amp;#034;s&amp;#034;, &amp;#034;...&amp;#034;}, {&amp;#034;t&amp;#034;, &amp;#034;-&amp;#034;}, {&amp;#034;u&amp;#034;, &amp;#034;..-&amp;#034;},&#xD;
     {&amp;#034;v&amp;#034;, &amp;#034;...-&amp;#034;}, {&amp;#034;w&amp;#034;, &amp;#034;.--&amp;#034;}, {&amp;#034;x&amp;#034;, &amp;#034;-..-&amp;#034;},&#xD;
     {&amp;#034;y&amp;#034;, &amp;#034;-.--&amp;#034;}, {&amp;#034;z&amp;#034;, &amp;#034;--..&amp;#034;}, {&amp;#034;0&amp;#034;, &amp;#034;-----&amp;#034;},&#xD;
     {&amp;#034;1&amp;#034;, &amp;#034;.----&amp;#034;}, {&amp;#034;2&amp;#034;, &amp;#034;..---&amp;#034;}, {&amp;#034;3&amp;#034;, &amp;#034;...--&amp;#034;},&#xD;
     {&amp;#034;4&amp;#034;, &amp;#034;....-&amp;#034;}, {&amp;#034;5&amp;#034;, &amp;#034;.....&amp;#034;}, {&amp;#034;6&amp;#034;, &amp;#034;-....&amp;#034;},&#xD;
     {&amp;#034;7&amp;#034;, &amp;#034;--...&amp;#034;}, {&amp;#034;8&amp;#034;, &amp;#034;---..&amp;#034;}, {&amp;#034;9&amp;#034;, &amp;#034;----.&amp;#034;}&#xD;
     };&#xD;
    &#xD;
    Clear[createMorseString];&#xD;
    createMorseString[str_String]:=str//Characters//ToLowerCase//(#/.morsecode &amp;amp;)//Flatten//StringJoin;&#xD;
    &#xD;
    Clear[blinkMorseString];&#xD;
    blinkMorseString[dev_DeviceObject,str_String]:=DeviceWrite[dev,str]&#xD;
    &#xD;
    End[];&#xD;
    EndPackage[];&#xD;
&#xD;
&#xD;
We can now do something like&#xD;
&#xD;
    blinkMorseString[dev,createMorseString[&amp;#034;SOS&amp;#034;]]&#xD;
&#xD;
and voila, my microcontroller is sending a morse code distress signal, probably because the pile of ungraded lab reports is toppling onto my hardware!&#xD;
&#xD;
I made a [short video][3] showing how the first 7 letters of the alphabet look. It&amp;#039;s riveting. &#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=morseduino-optimize.gif&amp;amp;userId=20103&#xD;
  [2]: /c/portal/getImageAttachment?filename=m328ptopi.JPG&amp;amp;userId=61884&#xD;
  [3]: https://www.youtube.com/watch?v=OLVH-2cFiGg</description>
    <dc:creator>BoB LeSuer</dc:creator>
    <dc:date>2015-04-11T22:42:29Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3252066">
    <title>Code compatibility: Wolfram Player, Wolfram One and Mathematica on Raspberry Pi</title>
    <link>https://community.wolfram.com/groups/-/m/t/3252066</link>
    <description>Hi there,&#xD;
&#xD;
The attached Mathematica notebook file is coded on MacOS using Mathematica 14.0, but does not work on RP 4 and RP 5:  &#xD;
[a related thread on the Raspberry forum][1].&#xD;
&#xD;
I noticed that only the first output block works in Wolfram Player.&#xD;
&#xD;
As far as I know, the Mathematica on RP is a full version of Mathematica.  &#xD;
Also, Wolfram Player must be able to execute the output cell.&#xD;
&#xD;
But why are some code snippets in input cells and the graphics in output cells incompatible in different environments? Is this a bug that will be fixed?&#xD;
&#xD;
&#xD;
  [1]: https://forums.raspberrypi.com/viewtopic.php?t=375393</description>
    <dc:creator>PyoungRyang Ko</dc:creator>
    <dc:date>2024-08-20T10:44:30Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1057588">
    <title>Parallel Mathematica Environment on the RaspberryPi using OOP</title>
    <link>https://community.wolfram.com/groups/-/m/t/1057588</link>
    <description>My project, Parallel Mathematica Environment on the RaspberryPi using OOP, is a sample application of **Object Oriented Programming for the Mathematica** cluster computing, implemented with a Mac and three RaspberryPi Zero connected with a USB hub and three USB cables.&#xD;
&#xD;
Basic idea is to deploy a constructed instance image to calculating servers (RaspberryPi) and send messages to the instance. [OOP on the Mathematica is already developed and shown][1] in this community, and further detail is shown on [slidesshare][2] titled of &amp;#034;OOP for Mathematica.&amp;#034;&#xD;
![enter image description here][3]&#xD;
&#xD;
&#xD;
----------&#xD;
&#xD;
&#xD;
&#xD;
Preparing for RaspberryPi Zero is as follows using SSH connection from a Mac, &#xD;
&#xD;
 - naming each Zero as raspberypi,raspberrypi1,raspberrypi2,...&#xD;
 - set the server program &amp;#034;init&amp;#034; to each RaspberryPi, init is,&#xD;
&#xD;
        $ cat init&#xD;
        While[True,&#xD;
        Run[nc -l 8000&amp;gt;input];&#xD;
        temp=ReleaseHold[&amp;lt;&amp;lt;input];&#xD;
        temp &amp;gt;&amp;gt;output;&#xD;
        Run[nc your-mac-hostname.local 8002&amp;lt;output]&#xD;
        ]&#xD;
        &#xD;
&#xD;
where, socket numbers must be identical.&#xD;
&#xD;
 - Run Mathematica manually, and wait the booting Mathematica up.&#xD;
&#xD;
        $ wolfram &amp;lt;init&amp;amp;&#xD;
&#xD;
Checking each RaspberryPi is useful as,&#xD;
&#xD;
    $ nc -l 8002 &amp;gt;output|nc raspberrypi.local 8000 &amp;lt;&amp;lt;EOF&#xD;
    &amp;gt; 10!&#xD;
    &amp;gt; EOF&#xD;
    $ cat output&#xD;
    3628800&#xD;
&#xD;
&#xD;
----------&#xD;
&#xD;
Cluster controller program on a Mac is,&#xD;
&#xD;
 - set directory&#xD;
&#xD;
        SetDirectory[NotebookDirectory[]];&#xD;
&#xD;
 - setup socket communication process&#xD;
&#xD;
        com1=&amp;#034;nc -l 8002 &amp;gt;output1 |nc raspberrypi.local 8000 &amp;lt;input1&amp;#034;;&#xD;
        com2=&amp;#034;nc -l 9002 &amp;gt;output2 |nc raspberrypi1.local 9000 &amp;lt;input2&amp;#034;;&#xD;
        com3=&amp;#034;nc -l 9502 &amp;gt;output3 |nc raspberrypi2.local 9500 &amp;lt;input3&amp;#034;;&#xD;
&#xD;
 - set object property&#xD;
&#xD;
        obj={&#xD;
           &amp;lt;|&amp;#034;name&amp;#034;-&amp;gt;node1,&amp;#034;comm&amp;#034;-&amp;gt;com1,&amp;#034;in&amp;#034;-&amp;gt;&amp;#034;input1&amp;#034;,&amp;#034;out&amp;#034;-&amp;gt;&amp;#034;output1&amp;#034;,&amp;#034;p&amp;#034;-&amp;gt;{2000,3500}|&amp;gt;,&#xD;
           &amp;lt;|&amp;#034;name&amp;#034;-&amp;gt;node2,&amp;#034;comm&amp;#034;-&amp;gt;com2,&amp;#034;in&amp;#034;-&amp;gt;&amp;#034;input2&amp;#034;,&amp;#034;out&amp;#034;-&amp;gt;&amp;#034;output2&amp;#034;,&amp;#034;p&amp;#034;-&amp;gt;{3501,4000}|&amp;gt;,&#xD;
           &amp;lt;|&amp;#034;name&amp;#034;-&amp;gt;node3,&amp;#034;comm&amp;#034;-&amp;gt;com3,&amp;#034;in&amp;#034;-&amp;gt;&amp;#034;input3&amp;#034;,&amp;#034;out&amp;#034;-&amp;gt;&amp;#034;output3&amp;#034;,&amp;#034;p&amp;#034;-&amp;gt;{4000,4500}|&amp;gt;};&#xD;
&#xD;
 - define calculation server class, where is a sample Mersenne prime number calculation&#xD;
&#xD;
        new[nam_]:=Module[{ps,pe},&#xD;
           mersenneQ[n_]:=PrimeQ[2^n-1];&#xD;
           setv[nam[{s_,e_}]]^:={ps,pe}={s,e};&#xD;
           calc[nam]^:=Select[Range[ps,pe],mersenneQ]&#xD;
           ];&#xD;
&#xD;
 - construct instances&#xD;
&#xD;
        Map[new[#name]&amp;amp;,obj];&#xD;
&#xD;
 - deploy instances to calculation servers&#xD;
&#xD;
        Map[Save[#in,#name]&amp;amp;,obj];&#xD;
        Map[Run[#comm]&amp;amp;,obj];&#xD;
&#xD;
 - send message to each instance&#xD;
&#xD;
        Map[Put[Hold@setv[#name[#p]],#in]&amp;amp;,obj];&#xD;
        Map[Run[#comm]&amp;amp;,obj];&#xD;
&#xD;
 - start calculation&#xD;
&#xD;
        Map[Put[Hold@calc[#name],#in]&amp;amp;,obj];&#xD;
        proc=Map[StartProcess[{$SystemShell,&amp;#034;-c&amp;#034;,#comm}]&amp;amp;,obj]&#xD;
&#xD;
 - wait for the process termination (mannualy in this sample code)&#xD;
&#xD;
        Map[ProcessStatus[#]&amp;amp;,proc]&#xD;
         {Finished,Finished,Finished}&#xD;
&#xD;
 - gather the results&#xD;
&#xD;
        Map[FilePrint[#out]&amp;amp;,obj];&#xD;
         {2203, 2281, 3217}&#xD;
        {}&#xD;
        {4253, 4423}&#xD;
&#xD;
&#xD;
  [1]: http://community.wolfram.com/groups/-/m/t/897081?p_p_auth=o5qxZhNR&#xD;
  [2]: https://www.slideshare.net/kobayashikorio/oop-for-mathematica&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=2017-04-10.jpg&amp;amp;userId=897049</description>
    <dc:creator>Hirokazu Kobayashi</dc:creator>
    <dc:date>2017-04-10T01:15:22Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/503296">
    <title>Building a geolocation device with a Raspberry Pi and the GSM module SIM908</title>
    <link>https://community.wolfram.com/groups/-/m/t/503296</link>
    <description>In this post I show how the Wolfram Language enables us to build a geolocation device with a Rasberry Pi and the GSM module SIM908 (see [this previous post][1] for futher details about this module ). The module SIM908 includes a GPS and it is sold to develop geolocation applications. Usually this development involves a fair amount of code in other traditional languages and in this example I show how the Wolfram Language makes it possible to program a geolocator in fewer lines of code. The way in which the geolocator works is that it receives a SMS with a password string and after checking that the password is correct, sends a SMS to another cell phone with the geographic coordinates of the place where the geolocator is.&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
The code shown in this post can be adapted to other situations such as the remote control of a R-Pi or devices connected to it.&#xD;
The only requirement is that the R-Pi is placed in a region with cellular network coverage.&#xD;
&#xD;
**Material:**&#xD;
&#xD;
 1. A R-Pi computer (I used model B+).&#xD;
 2. SIM908 GSM module available from a number of vendors (I only tested the module sold [here][3]).&#xD;
 3. A working SIM card of a cell phone.&#xD;
&#xD;
## Description ##&#xD;
The set up of the GSM module is the same as in [this post][4] and we assume that you are familiar with the explanations given there about&#xD;
how the module is accessed and controlled using the Wolfram Language. The difference is that now we shall control the module &#xD;
by means of a program run as a script. The complete code of this program is the following&#xD;
&#xD;
    (* Open serial port *)&#xD;
    &#xD;
    serial = DeviceOpen[&amp;#034;Serial&amp;#034;, {&amp;#034;/dev/ttyAMA0&amp;#034;, &amp;#034;BaudRate&amp;#034; -&amp;gt; 115200}];&#xD;
    &#xD;
    (* Unlock SIM card by sending its PIN code *)&#xD;
    &#xD;
    DeviceWrite[serial, &amp;#034;AT+CPIN=****\r&amp;#034;];&#xD;
    &#xD;
    (* Switch GPS on *)&#xD;
    &#xD;
    DeviceWrite[serial, &amp;#034;AT+CGPSPWR=1\r&amp;#034;];&#xD;
    &#xD;
    (* Reset GPS *)&#xD;
    &#xD;
    DeviceWrite[serial, &amp;#034;AT+CGPSRST=0\r&amp;#034;];&#xD;
    &#xD;
    (* Set SMS mode to text *)&#xD;
    DeviceWrite[serial, &amp;#034;AT+CMGF=1\r&amp;#034;];&#xD;
    &#xD;
    (* Get location from GPS *)&#xD;
    Location[] := &#xD;
    Module[{nmea, lat, long}, &#xD;
    	DeviceWrite[serial, &amp;#034;AT+CGPSINF=0\r&amp;#034;];&#xD;
    	Pause[5];&#xD;
      	nmea = ImportString[FromCharacterCode@DeviceReadBuffer[serial], &amp;#034;Table&amp;#034;];&#xD;
    	nmea = nmea[[-2]];&#xD;
    	nmea = First@StringSplit[nmea, &amp;#034;,&amp;#034;];&#xD;
    	long = ToExpression@nmea[[2]];&#xD;
    	lat = ToExpression@nmea[[3]];&#xD;
    	(* Transform to decimal lat long *) &#xD;
    	lat = IntegerPart[lat/100] + 100/60 (lat/100 - IntegerPart[lat/100]);&#xD;
    	long = IntegerPart[long/100] + 100/60 (long/100 - IntegerPart[long/100]);&#xD;
      	{lat, long}&#xD;
    ]&#xD;
    &#xD;
    (* Flush serial port buffer (allow some time to process the previous set of instructions) *)&#xD;
    &#xD;
    Pause[5];&#xD;
    DeviceReadBuffer[serial];&#xD;
    &#xD;
    (* Loop to query unread SMS messages *)&#xD;
    &#xD;
    While[True, &#xD;
    	sms = FromCharacterCode@DeviceReadBuffer[serial];&#xD;
    	Pause[5];&#xD;
    	sms = ImportString[sms, &amp;#034;Table&amp;#034;];&#xD;
    	If[sms =!= {},&#xD;
    		(* Flush serial port buffer *)&#xD;
    		DeviceReadBuffer[serial];&#xD;
    		(* Get unread SMS *)&#xD;
    		DeviceWrite[serial, &amp;#034;AT+CMGL=\&amp;#034;REC UNREAD\&amp;#034;\r&amp;#034;];&#xD;
    		Pause[5];&#xD;
    		message=FromCharacterCode@DeviceReadBuffer[serial];&#xD;
    		message=ImportString[message,&amp;#034;Table&amp;#034;];&#xD;
    		Print[message];&#xD;
    		message=Part[message,-3];&#xD;
    		Print[message];&#xD;
    		(* Check that sms text message matches a pre-defined string *)&#xD;
    		If[message === {&amp;#034;position&amp;#034;},&#xD;
    			(* Get lat long *)&#xD;
    			loc = ToString@Location[];&#xD;
      			(* Send location via SMS to destination cell phone in this case the number 111111111 *)&#xD;
    			DeviceWrite[serial, &amp;#034;AT+CMGS=\&amp;#034;111111111\&amp;#034;\r&amp;#034;];&#xD;
      			DeviceWrite[serial, loc];&#xD;
      			DeviceWrite[serial, FromCharacterCode[{26}]];&#xD;
      			Pause[10]&#xD;
    		]; 	&#xD;
      		(* Flush serial port buffer *)&#xD;
      		DeviceReadBuffer[serial]&#xD;
    	]&#xD;
    ]&#xD;
    &#xD;
Let us explain the code step by step. The way the module works is by sending commands over the serial port with DeviceWrite and &#xD;
retrieving the module answer to these commands by reading the contents of the serial port buffer with DeviceReadBuffer. See&#xD;
[here][5] and  [here][6] for more details.&#xD;
&#xD;
The meaning of the commands in the first couple of lines was already explained in [this post][7] The line&#xD;
&#xD;
    DeviceWrite[serial, &amp;#034;AT+CGPSPWR=1\r&amp;#034;];&#xD;
&#xD;
switchs the embedded GPS on (by default it is turned off). Once the GPS is on it is accessed and controlled with a suite of &#xD;
commands available for that purpose. They are described in the module manual and here we just explain those commands we use.&#xD;
The command&#xD;
&#xD;
    DeviceWrite[serial, &amp;#034;AT+CGPSRST=1\r&amp;#034;];&#xD;
&#xD;
resets the GPS in &amp;#034;autonomy mode&amp;#034;. This is useful if it has been been used recently because it will reduce the time &#xD;
a satellite fix takes. For a first time usage a &amp;#034;cold reset&amp;#034; is the recommended option and the command is&#xD;
&#xD;
    DeviceWrite[serial, &amp;#034;AT+CGPSRST=0\r&amp;#034;];&#xD;
&#xD;
After doing the reset in either way, the GPS starts tracking satellites. We can query the progress with the command &#xD;
&#xD;
    DeviceWrite[serial, &amp;#034;AT+CGPSINF=0\r&amp;#034;];&#xD;
&#xD;
Once a fix is achieved this command returns a number of parameters including the position (latitude &amp;amp; longitude) &#xD;
the date and the elevation. To use this information later we have the function Location[] which includes the above command and parses its output returning the latitude and longitude as decimal numbers.&#xD;
&#xD;
After having sent all the previous commands we need to remove their outputs from the serial port buffer as we do not need them &#xD;
in our program (and we need to have this buffer cleared to process the output of further commands). This is done as follows:&#xD;
&#xD;
    Pause[5];&#xD;
    DeviceReadBuffer[serial];&#xD;
&#xD;
Once the contents of the buffer are read, it is cleared and we can get the output of the commands which we send next. The reason we &#xD;
used Pause[5] before reading the buffer contents is to make sure that the buffer had enough time to be filled with the output of the &#xD;
previous commands (if we didn&amp;#039;t do this the buffer might not be entirely cleared after executing DeviceReadBuffer).&#xD;
&#xD;
We are now all set to start our main job which is carried out in the While loop. In this loop we read the contents of the serial port &#xD;
buffer every 5 seconds and check the response. When a SMS arrives it generates a so-called &amp;#034;unsolicited response code&amp;#034; which reads +CMTI &#xD;
plus some information. We are not interested in the specific form of the unsolicited code, we only want to detect its presence and&#xD;
this is done with the boolean statement&#xD;
&#xD;
    sms =!= {}&#xD;
&#xD;
If this returns True then we know that a SMS arrived and then we start its processing. Essentially what we do is reading the SMS &#xD;
and checking that its text agrees with a predefined string which is &amp;#034;position&amp;#034;. When that happens then a SMS is sent &#xD;
to a cell phone destination with the latitude and longitude coordinates returned by Location[] (the SMS is sent in the way explained in&#xD;
[here][8]. The most important piece of code in this part is:&#xD;
&#xD;
    DeviceWrite[serial, &amp;#034;AT+CMGL=\&amp;#034;REC UNREAD\&amp;#034;\r&amp;#034;];&#xD;
    Pause[5];&#xD;
    message=FromCharacterCode@DeviceReadBuffer[serial];&#xD;
&#xD;
In the first line we query the module about the unread SMS messages (in this case this is the SMS which just arrived) and we&#xD;
obtain the SMS from the serial port buffer using DeviceReadBuffer as usual. Since we are working with a script we need &#xD;
to make sure that the module had enough time to give the answer to our command and for that we use Pause. The answer of the module&#xD;
is turned into a list of strings which looks like&#xD;
&#xD;
    {{AT+CMGL=&amp;#034;REC UNREAD&amp;#034;}, {}, {+CMGL:, 18,&amp;#034;REC UNREAD&amp;#034;,&amp;#034;sms_sender&amp;#034;,&amp;#034;&amp;#034;,&amp;#034;15/05/22,13:58:10+04&amp;#034;}, {position}, {}, {OK}}&#xD;
&#xD;
The SMS text is at the third position starting from the end of the list.&#xD;
&#xD;
## Running the program ##&#xD;
&#xD;
The program can be run by typing in the shell prompt&#xD;
    &#xD;
    # wolfram -script GeoLocator.m&#xD;
&#xD;
where &amp;#034;GeoLocator.m&amp;#034; is the name of the file the Wolfram Language code was saved in. If you let the script run and send a&#xD;
SMS to the geolocator with the text &amp;#034;position&amp;#034; (without quotes) then after some time you should see in the shell terminal the &#xD;
text&#xD;
&#xD;
    {{AT+CMGL=&amp;#034;REC UNREAD&amp;#034;}, {}, {+CMGL:, 18,&amp;#034;REC UNREAD&amp;#034;,&amp;#034;sms_sender&amp;#034;,&amp;#034;&amp;#034;,&amp;#034;15/05/22,13:58:10+04&amp;#034;}, {position}, {}, {OK}}&#xD;
    {position}&#xD;
&#xD;
this confirms that the SMS was received. After a moment you should receive in your destination cell phone the SMS with the geographic &#xD;
coordinates of the geolocator. If you get the SMS text &amp;#034;(0.,0.)&amp;#034; then it means that the GPS did not get a satellite fix yet and&#xD;
it just sent the default location (if the GPS is outdoors it shouldn&amp;#039;t take too much time to get a satellite fix).&#xD;
&#xD;
Finally in a practical geolocation application you might want to run the script as a background process&#xD;
&#xD;
    # wolfram -script GeoLocator.m &amp;amp;&#xD;
&#xD;
In this way you can log out from your R-Pi and let the script continue running. &#xD;
&#xD;
&#xD;
  [1]: http://community.wolfram.com/groups/-/m/t/497883?p_p_auth=gyDi0lFH&#xD;
  [2]: /c/portal/getImageAttachment?filename=431171Ou2idrKL._SL1001_.jpg&amp;amp;userId=11733&#xD;
  [3]: http://www.cooking-hacks.com/documentation/tutorials/geolocation-tracker-gprs-gps-geoposition-sim908-arduino-raspberry-pi&#xD;
  [4]: http://community.wolfram.com/groups/-/m/t/497883?p_p_auth=gyDi0lFH&#xD;
  [5]: http://en.wikipedia.org/wiki/Hayes_command_set&#xD;
  [6]: http://community.wolfram.com/groups/-/m/t/497883?p_p_auth=gyDi0lFH&#xD;
  [7]: http://community.wolfram.com/groups/-/m/t/497883?p_p_auth=gyDi0lFH&#xD;
  [8]: http://community.wolfram.com/groups/-/m/t/497883?p_p_auth=gyDi0lFH</description>
    <dc:creator>Alfonso Garcia-Parrado</dc:creator>
    <dc:date>2015-05-24T21:31:21Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3169401">
    <title>Why is this graph both continuous and discrete?</title>
    <link>https://community.wolfram.com/groups/-/m/t/3169401</link>
    <description>I just installed Mathematica on a Raspberry Pi and I am playing around and I run into this.&#xD;
If I do the graph up to 34, I see discrete steps. Over 35, I start to see a mix of discrete steps and continuous line. This case below, with the graph going from 1 to 50 is a good example. Why is the line changing from steps to continuous, back to steps and back to continuous? changes the 50 to 34 and it looks only steps.&#xD;
&#xD;
![Graph][1]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Screenshot2024-05-02at10.38.03%E2%80%AFPM.png&amp;amp;userId=3169286</description>
    <dc:creator>Viorel Negoita</dc:creator>
    <dc:date>2024-05-03T02:44:06Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3155725">
    <title>Mathematica 14 breaks upon startup on Raspberry Pi 5</title>
    <link>https://community.wolfram.com/groups/-/m/t/3155725</link>
    <description>Great having Mathematica 14 now also available for the Raspberry Pi, thank you very much!&#xD;
&#xD;
The only problem is that when starting an upgraded install (from 13.3.1). it stops with a series of errors, the first shown in the screenshot (I&amp;#039;m not using walynd but the old X/VNC combo).&#xD;
![Mathematica 14 startup error][1]&#xD;
&#xD;
Thanks for your help,  &#xD;
        Michael&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Mathematica14_error.jpg&amp;amp;userId=1664744</description>
    <dc:creator>Michael Byczkowski</dc:creator>
    <dc:date>2024-04-09T18:24:27Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3140560">
    <title>Downgrading for dragon year Pi day</title>
    <link>https://community.wolfram.com/groups/-/m/t/3140560</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/f8c1cc1b-f366-4bb5-bda3-dd5bfb4c07c6</description>
    <dc:creator>Brad Klee</dc:creator>
    <dc:date>2024-03-14T01:07:00Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3103515">
    <title>Installing ARM Mathematica Version with GUI on  Android Devices using Termux-x11</title>
    <link>https://community.wolfram.com/groups/-/m/t/3103515</link>
    <description>This is a guide for installing Mathematica ARM Version (Raspberry Pi) on Android devices with a full GUI. The guide assumes that one has Termux-x11 and proot-distro working in order to have a GUI. You are required to have a Mathematica key for Linux to activate.&#xD;
&#xD;
[Termux][1] and [Termux-x11][2] are a terminal and x11-forwarding implementation for Android devices. There is no root requirement, thus the security of your device will not be compromised. Please refer to these guides in order to install and get them working.&#xD;
&#xD;
[Proot-distro][3] is a quick way to get a linux distro to work on Android devices. It is not a virtual machine because all installed distros are the ARM64 version to work with most phones/tablets&amp;#039; processors. Rather, proot-distro is a container environment manager, handling/hijacking system IO and storage to emulate chroot and mount for non-rooted devices, thus if your device is rooted, you do not need to install proot-distro. Because it is not a virtual machine, you have almost full processing speed except for the IO hijacking, giving a minor hit to the performance. However, as long as the calculation in Mathematica does not involve a lot of IOs, performance is very decent. Please follow the guide and install the debian (for rooted device, install debian using whatever you want). &#xD;
&#xD;
Here, we need debian because the ARM version of Mathematica is built for Raspbian originally, which is debian-based, thus using debian via proot-distro helps to handle some system dependents that native Termux does not have. It is my goal in the future to have Mathematica working natively on Termux to get native performance. Inputs/helps are needed and welcome!&#xD;
&#xD;
**How to Install Wolfram Kernel (back end):**&#xD;
&#xD;
- Start proot-distro debian by&#xD;
&#xD;
        proot-distro login debian&#xD;
&#xD;
- Allow a multi-architecture (64+32-bit) and install 32-bit libraries because Mathematica uses some of these (the latter is optional, but it might help in case you see some error related to 32-bit instruction)&#xD;
&#xD;
        dpkg --add-architecture armhf&#xD;
        apt install libatomic1:armhf libgl1:armhf&#xD;
&#xD;
- Download the [Raspberry Pi installation script][4] from Wolfram and put it in the root folder of debian. You should have access to your usual Android &amp;#034;Download&amp;#034; folder through &#xD;
&#xD;
        cd //sdcard/Download/&#xD;
&#xD;
- Execute the official installation script (Current version is 13.3.1, but this might change when they release new version)&#xD;
&#xD;
        bash ./install-wolfram-engine-13.3.1.sh&#xD;
&#xD;
- At this point, everything should be set. You can activate Mathematica by starting its Kernel and follow the instruction (I activate sucessfully using a Linux Mathematica Key provided by my institution)&#xD;
&#xD;
        wolfram&#xD;
&#xD;
- After activation, you should have been forwarded to the Wolfram CLI Kernel, where we have full access to the Kernel (back end). To quit, execute&#xD;
&#xD;
        Quit[]&#xD;
&#xD;
&#xD;
**How to run Mathematica GUI (front end):**&#xD;
&#xD;
- Start the Termux-x11 app on your Android device and a termux terminal. Then, start an x11 instance by executing in Termux terminal&#xD;
&#xD;
        termux-x11 :1 &amp;amp;&#xD;
&#xD;
    If Termux and Termux-x11 have been installed correctly, you should see the x11 app window black and the mouse cursor is an x.&#xD;
&#xD;
&#xD;
- Start debian with x-11 forwarding&#xD;
&#xD;
        proot-distro login debian --shared-tmp&#xD;
&#xD;
- Set display to the previously started (1 in this case)&#xD;
&#xD;
        export DISPLAY=:1&#xD;
&#xD;
- Optional step: Install xfce4 desktop environment to have full multi-window desktop experience (otherwise you cannot control fullscreen window in x11 window)&#xD;
&#xD;
        apt install xfce4&#xD;
    To start the desktop environment (you should see the x11 app with full desktop interface now)&#xD;
&#xD;
        xfce4-session &amp;amp;&#xD;
&#xD;
- Start Mathematica from command line&#xD;
&#xD;
        mathematica &amp;amp;&#xD;
    and you should see the Raspberry Pi Mathematica window pop-up! &#xD;
&#xD;
Tested device: Samsung Tab S9 with Snapdragon 8 gen 2 runnning Android 14 + One UI 6.&#xD;
&#xD;
&#xD;
&#xD;
  [1]: https://github.com/termux/termux-app&#xD;
  [2]: https://github.com/termux/termux-x11&#xD;
  [3]: https://github.com/termux/proot-distro&#xD;
  [4]: https://www.wolfram.com/raspberry-pi/</description>
    <dc:creator>Quan Le Thien</dc:creator>
    <dc:date>2024-01-15T18:07:20Z</dc:date>
  </item>
</rdf:RDF>

